/***********************************************************************
* Android 系统 reboot
* 说明:
* 由于需要对Android系统采用自动重启测试,为了方便觉得让app接收开机
* 广播,然后又自动关机,貌似有点蛋疼。
*
* 2016-5-18 深圳 南山平山村 曾剑锋
**********************************************************************/
一、参考文章:
1. Restart android device programmatically
http://stackoverflow.com/questions/32984849/restart-android-device-programmatically
2. INSTALL_FAILED_UPDATE_INCOMPATIBLE和INSTALL_FAILED_SHARED_USER_INCOMPATIBLE
http://blog.csdn.net/happyhell/article/details/5903389
3. Android: android.content.res.Resources$NotFoundException: String resource ID #0x5
http://stackoverflow.com/questions/11189545/android-android-content-res-resourcesnotfoundexception-string-resource-id-0x
二、解决办法:
1. 设置权限:
<permission android:name="android.permission.REBOOT"/>
2. 设置系统UID:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.aplex.autoreboot"
android:versionCode="1"
android:versionName="1.0"
android:installLocation="preferExternal"
android:sharedUserId="android.uid.system">
3. 重启代码:
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
pm.reboot(null);
4. Android.mk
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(call all-java-files-under)
LOCAL_PACKAGE_NAME := AutoReboot
LOCAL_CERTIFICATE := platform
include $(BUILD_PACKAGE)
# Use the folloing include to make our test apk.
include $(call all-makefiles-under,$(LOCAL_PATH))
5. 将工程放入Android源码packages/apps目录;
6. 删除工程中无关目录,如bin、libs等目录;
7. 用Android自带mmm命令编译app。
三、error:
1. error1:
1. 错误现象:
Installation error: INSTALL_FAILED_SHARED_USER_INCOMPATIBLE
Please check logcat output for more details.
Launch canceled!
2. 解决办法:
采用到Android源代码中去编译apk。
2. error2:
1. 错误现象:
FATAL EXCEPTION: main
android.content.res.Resources$NotFoundException: String resource ID #0x9
at android.content.res.Resources.getText(Resources.java:230)
at android.widget.TextView.setText(TextView.java:3769)
at com.aplex.autoreboot.MainActivity$1.handleMessage(MainActivity.java:25)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5041)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
at dalvik.system.NativeStart.main(Native Method)
2. 解决办法:
Handler handler = new Handler() {
public void handleMessage(Message msg) {
Log.e("aplex", "handleMessage " + msg.what );
if (msg.what < 100) {
count.setText(msg.what + ""); // 这里要加上""
} else {
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
pm.reboot(null);
}
Log.e("aplex", "handleMessage over " + msg.what );
super.handleMessage(msg);
}
};