Android 重启的几种方式
2016-02-19 18:56
507 查看
客户需要一个重启接口,尝试了以下几种方式实现:
1.广播方式,最终采用这种方式。这种重启方式有个过程,会显示“正在关机”对话框。需要uid为system的应用执行:
当然,可以不显示对话框,但是流程还是会走:
代码位置:frameworks/base/services/java/com/android/server/power/ShutdownThread.java
2.命令行方式,实测执行没有效果,应该是没有Root权限
3.通过SystemProperties触发执行脚本方式,实测这种方式没有效果,应该是步骤③的脚本无法执行,分析是权限问题:
①在init.rc添加重启服务,当属性app.tchip.reboot为1时触发:
②在system/core/init/property_service.c增加app.tchip.reboot属性,初始值为0:
③编写tchipreboot.sh,编译到out/.../system/bin/下,内容如下:
④Java代码中改变app.tchip.reboot属性值,触发重启:
1.广播方式,最终采用这种方式。这种重启方式有个过程,会显示“正在关机”对话框。需要uid为system的应用执行:
private void normalReboot(){ try { Intent intent = new Intent(Intent.ACTION_REBOOT); intent.putExtra("nowait", 1); intent.putExtra("interval", 1); intent.putExtra("window", 0); context.sendBroadcast(intent); } catch (Exception e) {} }
当然,可以不显示对话框,但是流程还是会走:
代码位置:frameworks/base/services/java/com/android/server/power/ShutdownThread.java
--- a/frameworks/base/services/java/com/android/server/power/ShutdownThread.java +++ b/frameworks/base/services/java/com/android/server/power/ShutdownThread.java @@ -407,7 +407,7 @@ public final class ShutdownThread extends Thread { pd.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG); /* To fix video+UI+blur flick issue */ pd.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND); - pd.show(); + // pd.show(); } sInstance.mHandler.postDelayed(mDelayDim, screenTurnOffTime); }
2.命令行方式,实测执行没有效果,应该是没有Root权限
private void forceReboot(){ String cmd = "su -c reboot"; try { Runtime.getRuntime().exec(cmd); } catch (Exception e) { } }
3.通过SystemProperties触发执行脚本方式,实测这种方式没有效果,应该是步骤③的脚本无法执行,分析是权限问题:
①在init.rc添加重启服务,当属性app.tchip.reboot为1时触发:
#Reboot Start #disabled:服务不会自动运行,必须显式地通过服务器来启动。 #oneshot:当此服务退出时不会自动重启。 service tchipRebootService /system/bin/tchipreboot.sh disabled oneshot on property:app.tchip.reboot=1 start tchipRebootService #Reboot End
②在system/core/init/property_service.c增加app.tchip.reboot属性,初始值为0:
{ "app.tchip.reboot", AID_SYSTEM, 0}, // add for reboot
③编写tchipreboot.sh,编译到out/.../system/bin/下,内容如下:
#!/system/bin/sh reboot
④Java代码中改变app.tchip.reboot属性值,触发重启:
SystemProperties.set("app.tchip.reboot","1");
相关文章推荐
- 【转】Android 手机连接台式电脑无线 Wi-Fi 上网
- Android中AsyncTask使用详解
- ANDROID_MARS学习笔记_S02_012_ANIMATION_利用AnimationListener在动画结束时删除或添加组件
- Android笔记之卫星菜单的实现
- Android 沉浸式状态栏设计以及ContentView获取
- Android 性能优化之使用线程池处理异步任务
- Android Studio多工程引用同一个library项目配置方法
- Android开发中一些被冷落但却很有用的类和方法
- Android中一个关于ListView的奇怪问题
- Android原生定位
- 02-19 17:57:05.024: E/AndroidRuntime(27831): java.lang.RuntimeException: Unable to start activity
- android:TableLayout表格布局详解
- android: android中dip、dp、px、sp和屏幕密度
- Android知识结构
- 使用apktool 2.0 反编译和批量打包
- Android studio错误Installation failed since the device possibly has stale dexed jars that don't match
- 圆形头像以及一些常见需求形状自定义ImageView组件
- Android需要学习的控件
- 从零開始学android<TabHost标签组件.二十九.>
- Android Studio Gradle多渠道打包