开始在网上搜索很多关于关机的程序。网上主流关机程序是在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显示确认关机的对话框,让用户选择是否确认关机
原文:http://www.cnblogs.com/chuji1988/p/3946935.html