中国网站,建立网站批复,百度的seo排名怎么刷,奉新网站建设一、Android系统重启的实现方式 1、广播方式 之前的博文介绍过这种方式《使用广播实现的Android关机及重启》#xff0c;注意应用要在源码中编译#xff0c;并且应用需要系统权限。 2、通过init.rc启动系统服务来运行sh文件 a.重启shell文件#xff08;system_reboot.sh注意应用要在源码中编译并且应用需要系统权限。 2、通过init.rc启动系统服务来运行sh文件 a.重启shell文件system_reboot.sh放在system/etc/目录下 [java] view plain copy #!/system/bin/sh reboot b.init.rc中加入一个Service的定义 [java] view plaincopyservice system_reboot /system/etc/system_reboot.sh oneshot disabled c.启动系统服务 [java] view plaincopySystemProperties.set(ctl.start, system_reboot); 3、直接代码中执行命令行 需要取得root权限 [java] view plain copy Process proc Runtime.getRuntime().exec(cmd); 以上三种方法可以实现重启但现在需要实现长按关机键提示对话框中有重启选项这就设计修改系统源码感觉修改源码是个很难的工作其实找到关机提示框的代码位置一切都变得很简单。 二、修改源码定制重启功能 1、跟踪长按Power键相关代码 首先要了解长按电源键弹出对话框的相关源码位置通过跟踪找到PhoneWindowManager.java中有截断长按电源键的方法继续跟踪代码找到Runnable mPowerLongPress new Runnable()在该runnable里边调用showGlobalActionsDialog()方法便是显示长按power键弹出的关机提示对话框如果你的机器是原生态的默认提示“飞行模式”“静音”和“关机”选项。 showGlobalActionsDialog创建关机对话框的代码在GlobalActions.java里边主要代码如下 [java] view plain copy private AlertDialog createDialog() { …… mItems new ArrayListAction(); // first: power off mItems.add( new SinglePressAction( com.android.internal.R.drawable.ic_lock_power_off, R.string.global_action_power_off) { public void onPress() { // shutdown by making sure radio and power are handled accordingly. ShutdownThread.shutdown(mContext, true); } public boolean showDuringKeyguard() { return true; } public boolean showBeforeProvisioning() { return true; } }); // next: airplane mode mItems.add(mAirplaneModeOn); // last: silent mode if (SHOW_SILENT_TOGGLE) { mItems.add(mSilentModeAction); } …… 2、重启方法 跟踪源码到此处需要加入重启部分的源码也是往AlertDialog 添加多一项显示部分的代码直接造这power off即可需要加入重启逻辑的代码直接修改回调方法onPress里边上边代码粗体部分一开始我尝试了前文中提示的三种方法中的方法一和方法三均行不通后来也没再进一步排查原因估计权限问题。 本打算使用方法二再尝试一下突然想到为何不去看看关机的逻辑代码ShutdownThread.shutdown()打开ShutdownThread.java很快就发现源码里边也有reboot的实现方法如下 [java] view plain copy /** * Request a clean shutdown, waiting for subsystems to clean up their * state etc. Must be called from a Looper thread in which its UI * is shown. * * param context Context used to display the shutdown progress dialog. * param reason code to pass to the kernel (e.g. recovery), or null. * param confirm true if user confirmation is needed before shutting down. */ public static void reboot(final Context context, String reason, boolean confirm) …… 该方法的使用直接看注释知道reboot方法的后两个参数解释如下 reason 如果值为是null正常重启如果是recovery系统重启进入recovery mode confirm true显示关机提示框需要用户【确认】false不显示提示框直接关机 3、代码修改 a.在关机提示框中加入重启选项 弄清楚关机相关的源码直接在GlobalActions.java的createDialog方法中加入如下代码即可 [java] view plain copy ... ext: reboot global_action_reboot mItems.add( new SinglePressAction( com.android.internal.R.drawable.ic_lock_power_off, R.string.global_action_reboot) { public void onPress() { // reboot ShutdownThread.reboot(mContext,null,false); } public boolean showDuringKeyguard() { return true; } public boolean showBeforeProvisioning() { return true; } }); b.修改重启提示框以区分关机提示框 因为提示框默认是“关机”在ShutdownThread.java的beginShutdownSequence(context)方法中代码修改如下 [java] view plain copy /*/ //修改前 …… pd.setTitle(context.getText(com.android.internal.R.string.power_off)); pd.setMessage(context.getText(com.android.internal.R.string.shutdown_progress)); …… /*/ //修改后 …… if(mReboot){ // reboot progress pd.setTitle(context.getText(com.android.internal.R.string.global_action_reboot)); pd.setMessage(context.getText(com.android.internal.R.string.reboot_progress)); }else{ // shutdown progress pd.setTitle(context.getText(com.android.internal.R.string.power_off)); pd.setMessage(context.getText(com.android.internal.R.string.shutdown_progress)); } …… //*/ 重启功能实现了但是不能到此结束定制Android系统的重启功能添加选项和修改重启提示框时加入了“重启”和“正在重启”的字符串所以会涉及到在系统资源文件中添加新的字符串源码中资源文件涉及到的多国语言直接忽略我只在values/strings.xml和values-zh-rCN/strings.xml两个文件中加入对应的字符串 [html] view plain copy string nameglobal_action_reboot重启/string string namereboot_progress正在重启.../string c.最后编译 因为修改涉及到系统资源文件又涉及到policy.jar包经过多次尝试正确的编译顺序如下 步骤1.编译frameworks/base/res在out/target/product/X设备名X/system/framework/目录下生成framework-res.apk 步骤2.编译frameworks/base/在o同样目录下生成framework.jar包不能忽略不然步骤3编译报错 步骤3.编译frameworks/base/policy在同样目录下生成policy.jar包 附录 本例源码以Android 4.0.4为准2.3一样关机相关的源码路径 ics/frameworks/base/policy/src/com/android/internal/policy/impl/目录下 PhoneWindowManager.java GlobalActions.java ics/frameworks/base/core/java/com/android/internal/app/目录下 ShutdownThread.java PS:4.1.1 关机相关方法位置有些变化 源码已经把关机的接口整合到 public classWindowManagerService extends IWindowManager.Stub implements Watchdog.Monitor, WindowManagerPolicy.WindowManagerFuncs{...}中 不过可以直接使用 import com.android.server.pm.ShutdownThread; ShutdownThread.shutdown(mContext, true); ShutdownThread.rebootSafeMode(mContext, true); 文件路径 Android4.1.1/jb/frameworks/base/services/java/com/android/server/pm/ ShutdownThread.java Android4.1.1/jb/frameworks/base/services/java/com/android/server/wm WindowManagerService.java