java部分代码:
case R.id.broadcast_reboot: //重启
Log.v("Reboot", "Reboot-->broadcast_reboot");
Intent i = new Intent(Intent.ACTION_REBOOT);
i.putExtra("nowait", 1);
i.putExtra("interval", 1);
i.putExtra("window", 0);
sendBroadcast(i);
break;
case R.id.broadcast_shutdown: //关机
Log.v("Reboot", "Reboot-->broadcast_shutdown");
Intent intent = new Intent(Intent.ACTION_REQUEST_SHUTDOWN);
intent.putExtra(Intent.EXTRA_KEY_CONFIRM, false);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
break;
注:关机可以设置时间设置【定时关机】功能,关机中的Intent.ACTION_REQUEST_SHUTDOWN 及 Intent.EXTRA_KEY_CONFIRM 在IDE中报错,但可以忽略,因为这两个属性不对上层开放,APP在源码中编译就可以直接使用。
步骤二:修改Manifest.xml中属性
< manifest xmlns:android = "http://schemas.android.com/apk/res/android"
……android:sharedUserId = "android.uid.system"
……>< uses-permission android:name = "android.permission.SHUTDOWN" />
……</ manifest >
注:
android:sharedUserId="android.uid.system" 将app提升到系统权限,需要到源码中编译,还有关机权限: android.permission.SHUTDOWN
步骤三:编译APK
将项目拷贝到Android源码中进行编译,我拷贝到【gingerbread/development/apps/】下,并将项目的bin文件夹给删除,同时最重要的一步在项目下编写mk文件,山寨其它项目的mk文件写如下,不要漏掉LOCAL_CERTIFICATE := platform
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 := 你的项目名
LOCAL_CERTIFICATE := platform
include $(BUILD_PACKAGE)
步骤四:
通过mm编译生成的apk安装到机器中,就可以操作重启及关机
注:使用相同的方法可以修改系统时间,重点是将应用提升到拥有系统权限,但进过此操作并未获得root权限。
补充:后来使用init.rc启动系统服务的方法也是可行的,之前是因为编写关机 和 重启的sh文件使用了中文符号,使得sh命令有问题