Android 关机实现

博客导航
本文的关机实现用两个种方法,一个是不需要安卓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"权限。android:sharedUserId="android.uid.system"是将自己的程序加入到了系统的进程中,同时也将获得系统的权限。需要添加系统签名。
下面是范例:



    

**当然,这些代码在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过。

你可能感兴趣的:(Android)