android 2.3.4代码实现关机

开始在网上搜索很多关于关机的程序。网上主流关机程序是在Java成发送要求关机的Intent.,如下:

Intent intent = new Intent(Intent.ACTION_REQUEST_SHUTDOWN);  
intent.putExtra(Intent.EXTRA_KEY_CONFIRM, false);  
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  
mContext.startActivity(intent);  

 需要加上相关的权限:

android:sharedUserId="android.uid.system"
<uses-permission android:name="android.permission.SHUTDOWN"/>
这里涉及到一个问题:要在程序里面加上系统程序权限。如何在程序里面加上系统权限呢?
我的解决方案是先写一个系统关机程序,生成shutdown.apk应用程序,然后项目代码在调用这个shutdown.apk就可以完美关机了。
1.要获得shutdown.apk应用程序。然而这个应用程序需要提升system app级别。获取系统级别最好在源码下编译生成apk,
这样很容易提升system app级别。
1.1、创建Shutdown工程。主要涉及ShutDownActivity.java和AndroidMainfest.xml.
1.2、ShutDownActivity.java源码如下:
public class ShutDownActivity extends Activity {
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		Intent it = new Intent("android.intent.action.ACTION_REQUEST_SHUTDOWN");
		it.putExtra("android.intent.extra.KEY_CONFIRM", false);
		it.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
		startActivity(it);
	}

}
1.3、AndroidMainfest.xml源码如下:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.hutao.shutdown"
    android:versionCode="1"
   android:sharedUserId="android.uid.system"
android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="10" /> <uses-permission android:name="android.permission.SHUTDOWN"/> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.hutao.shutdown.ShutDownActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
1.4、将建好的工程拷到/packages/apps/目录下面,然后在现在源码顶层source build/envsetup.sh。我的源码顶层为
rowboat-android下面。然后将res下面的drawable-xxhdpi、values-sw600dp、value-sw720dp-land删除。在
/rowboat-android/packages/apps/Shutdown/下面创建Android.mk文件
LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)



LOCAL_MODULE_TAGS := optional



LOCAL_SRC_FILES := $(call all-java-files-under, src)



LOCAL_PACKAGE_NAME := shutdown

LOCAL_CERTIFICATE := platform



include $(BUILD_PACKAGE)



# Use the folloing include to make our test apk.

include $(call all-makefiles-under,$(LOCAL_PATH))
然后在当前目录下进行mm命令编译,在out/target/product/system/app/生成shutdown.apk
2.调用shutdown.apk关机。
2.1调用shutdown.apk代码
Intent myIntent = new Intent();  
myIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);  
myIntent.setClassName("com.hutao.shutdown",   
		"com.hutao.shutdown.ShutDownActivity");  
startActivity(myIntent);
2.2在调用关机界面时候有两种形式:
即it.putExtra("android.intent.extra.KEY_CONFIRM", false);//false不显示确认关机的对话框,直接关机
或it.putExtra("android.intent.extra.KEY_CONFIRM", true);//true显示确认关机的对话框,让用户选择是否确认关机

 


 



 


 



郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。