Android 关机实现
2016-05-23 13:40
357 查看
本文的关机实现用两个种方法,一个是不需要安卓root过,但是需要目标系统的系统签名;另外一个是需要系统root过。
源码中“android.intent.extra.KEY_CONFIRM”是 Intent.EXTRA_KEY_CONFIRM 方法。
源码中“android.intent.action.ACTION_REQUEST_SHUTDOWN“ 是 Intent.ACTION_REQUEST_SHUTDOWN 方法
需要在AndroidManifest.xml里添加
下面是范例:
当然,这些代码在eclipse里会报错(我当时用的是eclipse),把这些错误报告删掉,强行编译就可以了。具体做法是把problems里的把与它相关的错误报告删除掉。Windows-show view-other-搜索problems可以找到错误报告。上机用时需要添加系统签名,不然安装不上。
签名用目标系统的platform密钥来重新给apk文件签名。在我的Android源码目录中的位置是”build\target\product\security”,下面的platform.pk8和platform.x509.pem两个文件。然后用Android提供的Signapk工具来签名,signapk的源代码是在”build\tools\signapk”下,用法为”signapk
platform.x509.pem platform.pk8 input.apk
output.apk”,文件名最好使用绝对路径防止找不到,也可以修改源代码直接使用。
这个就不多解释了,用系统组里root身份来行使系统权限关机。安卓系统需要root过。
一、利用系统签名来获取权限关机
关机代码如下:
private void shutDown(){ Intent intent = new Intent("android.intent.action.ACTION_REQUEST_SHUTDOWN"); intent.putExtra("android.intent.extra.KEY_CONFIRM", false); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); }
源码中“android.intent.extra.KEY_CONFIRM”是 Intent.EXTRA_KEY_CONFIRM 方法。
源码中“android.intent.action.ACTION_REQUEST_SHUTDOWN“ 是 Intent.ACTION_REQUEST_SHUTDOWN 方法
需要在AndroidManifest.xml里添加
android:sharedUserId="android.uid.system"和
<uses-permission android:name="android.permission.SHUTDOWN/>"权限。
android:sharedUserId="android.uid.system"是将自己的程序加入到了系统的进程中,同时也将获得系统的权限。需要添加系统签名。
下面是范例:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example" android:sharedUserId="android.uid.system" android:versionCode="1" android:versionName="1.0" > <uses-permission android:name="android.permission.SHUTDOWN"/>
当然,这些代码在eclipse里会报错(我当时用的是eclipse),把这些错误报告删掉,强行编译就可以了。具体做法是把problems里的把与它相关的错误报告删除掉。Windows-show view-other-搜索problems可以找到错误报告。上机用时需要添加系统签名,不然安装不上。
签名用目标系统的platform密钥来重新给apk文件签名。在我的Android源码目录中的位置是”build\target\product\security”,下面的platform.pk8和platform.x509.pem两个文件。然后用Android提供的Signapk工具来签名,signapk的源代码是在”build\tools\signapk”下,用法为”signapk
platform.x509.pem platform.pk8 input.apk
output.apk”,文件名最好使用绝对路径防止找不到,也可以修改源代码直接使用。
二、系统root过,利用系统管理员root身份来行使关机命令
try { createSuProcess("reboot -p").waitFor(); //关机命令 //createSuProcess("reboot").waitFor(); //这个部分代码是用来重启的 } catch (Exception e) { e.printStackTrace(); } static Process createSuProcess() throws IOException { File rootUser = new File("/system/xbin/ru"); if(rootUser.exists()) { return Runtime.getRuntime().exec(rootUser.getAbsolutePath()); } else { return Runtime.getRuntime().exec("su"); } } static Process createSuProcess(String cmd) throws IOException { DataOutputStream os = null; Process process = createSuProcess(); try { os = new DataOutputStream(process.getOutputStream()); os.writeBytes(cmd + "\n"); os.writeBytes("exit $?\n"); } finally { if(os != null) { try { os.close(); } catch (IOException e) { } } } return process; }
这个就不多解释了,用系统组里root身份来行使系统权限关机。安卓系统需要root过。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories