本文主要是针对android4.2关机菜单添加重启功能

A.关机提示
android4.2/frameworks/base/policy/src/com/android/internal/policy/impl/GlobalActions.java

[java] view plaincopy
  1. private void handleShow() {
  2. // 本函数不需要修改...
  3. awakenIfNecessary();
  4. mDialog = createDialog();
  5. prepareDialog();
  6. WindowManager.LayoutParams attrs = mDialog.getWindow().getAttributes();
  7. attrs.setTitle("GlobalActions");
  8. mDialog.getWindow().setAttributes(attrs);
  9. mDialog.show();// 关机选择对话框
  10. mDialog.getWindow().getDecorView().setSystemUiVisibility(View.STATUS_BAR_DISABLE_EXPAND);
  11. /****************
  12. 如果只需要关机确认可以修改为:
  13. awakenIfNecessary();
  14. mWindowManagerFuncs.shutdown(true);
  15. *******************/
  16. }

关机选项菜单 找到createDialog() 赋值power off那一项,  修改关机为:         mWindowManagerFuncs.reboot(true);

[java] view plaincopy
  1. private GlobalActionsDialog createDialog() {
  2. ....// 省略
  3. // first: power off
  4. mItems.add(
  5. ....// 省略
  6. });
  7. /
  8. // second:reboot  添加这一项
  9. try {// 添加try catch 为了避免错误...
  10. mItems.add(
  11. new SinglePressAction(
  12. com.android.internal.R.drawable.ic_lock_power_off,
  13. R.string.global_action_reboot) {
  14. public void onPress() {
  15. // shutdown by making sure radio and power are handled accordingly.
  16. //                    mWindowManagerFuncs.rebootSafeMode(true);
  17. //    mWindowManagerFuncs.reboot(mContext,null,false);
  18. //    ShutdownThread.reboot(mContext,null,false);
  19. try {
  20. mWindowManagerFuncs.reboot(true);
  21. } catch (Exception e) {
  22. // TODO: handle exception  如果有问题, 最好在这里打印一些信息看看是不是这里出问题了
  23. }
  24. }
  25. public boolean showDuringKeyguard() {
  26. return true;
  27. }
  28. public boolean showBeforeProvisioning() {
  29. return true;
  30. }
  31. });
  32. } catch (Exception e) {
  33. // TODO: handle exception
  34. }
  35. }
  36. <pre name="code" class="java">              /

........//省略 B. 1)    android4.2/frameworks/base/core/java/android/view/WindowManagerPolicy.java    找到WindowManagerFuncs这个interface的定义,增加如下function的声明:

[java] view plaincopy
  1. public interface WindowManagerFuncs {
  2. public void reboot(boolean confirm);
  3. }

2)
    android4.2/frameworks/base/services/java/com/android/server/wm/WindowManagerService.java

找到shutdown()函数,在其后面添加reboot()函数,函数内容如下:

[java] view plaincopy
  1. // Called by window manager policy. Not exposed externally.
  2. @Override
  3. public void reboot(boolean confirm) {
  4. ShutdownThread.reboot(mContext, confirm);
  5. }

C. 修改关机时的进度框提示

android4.2/frameworks/base/services/java/com/android/server/power/ShutdownThread.java

[java] view plaincopy
  1. /*/
  2. //修改前:
  3. ……
  4. pd.setTitle(context.getText(com.android.internal.R.string.power_off));
  5. pd.setMessage(context.getText(com.android.internal.R.string.shutdown_progress));
  6. ……
  7. /*/
  8. //修改后:
  9. ……
  10. if(mReboot){     // reboot progress
  11. pd.setTitle(context.getText(com.android.internal.R.string.global_action_reboot));
  12. pd.setMessage(context.getText(com.android.internal.R.string.reboot_progress));
  13. }else{          // shutdown progress
  14. pd.setTitle(context.getText(com.android.internal.R.string.power_off));
  15. pd.setMessage(context.getText(com.android.internal.R.string.shutdown_progress));
  16. }
  17. ……
  18. //*/

D.  重启询问对话框   // 这部分可能代码不一样  不过都是修改shutdownInner函数里面的sConfirmDialog这个dialog的

[cpp] view plaincopy
  1. shutdownInner(final Context context, boolean confirm)//
  2. if(Settings.Global.getInt(context.getContentResolver(), Settings.Global.DEVICE_PROVISIONED, 1)==1 &&
  3. SystemProperties.getBoolean("ro.sys.bootfast", false)){
  4. ......
  5. // 这部分可能代码不一样  不过都是修改sConfirmDialog这个dialog的
  6. if(mReboot){
  7. idBootMode = com.android.internal.R.string.reboot_confirm_question;
  8. }else{
  9. idBootMode = com.android.internal.R.string.shutdown_confirm_question;
  10. }
  11. sConfirmDialog = new AlertDialog.Builder(context)
  12. .setTitle(mReboot
  13. ? com.android.internal.R.string.global_action_reboot
  14. : com.android.internal.R.string.power_off)
  15. .setMessage(idBootMode)
  16. .setPositiveButton(com.android.internal.R.string.yes, new DialogInterface.OnClickListener() {
  17. public void onClick(DialogInterface dialog, int which) {
  18. if(mPolicy!=null)
  19. mPolicy.acquireBAView();
  20. beginShutdownSequence(context);
  21. }
  22. })
  23. .setNegativeButton(com.android.internal.R.string.no, null)
  24. .create();
  25. }

/说明  无关  只做注释///
              // 下面这个函数会杀死所有的activity, 桌面不能杀死"com.android.launcher", 否则就会导致关机的时候显示开机动画
              private  void killRemoveActivity(Context context)

/end说明///

F. 重启功能实现了,但是不能到此结束,定制Android系统的重启功能,添加选项和修改重启提示框时加入了“重启”和“正在重启”的字符串,
   所以会涉及到在系统资源文件中添加新的字符串,
   源码中资源文件涉及到的多国语言直接忽略,我只在values/strings.xml和values-zh-rCN/strings.xml两个文件中加入对应的字符串:

路径: framework/base/core/res/res/valuse/   or  framework/base/core/res/res/values-zh-rCN/

上面是拷贝别人的,  实际上我发现如果不在symbols.xml添加相关的字符串信息,  编译会报错的,  故应该在framework/base/core/res/res/valuse/ symbols.xml参考其他的把自己的添加上:

[html] view plaincopy
  1. strings.xml:
  2. <string name="reboot_confirm_question">"Do you want to reboot?"</string>
  3. <string name="global_action_reboot">"Reboot"</string>
  4. <string name="reboot_progress">"Rebooting..."</string>
  5. symbols.xml
  6. <java-symbol type="string" name="reboot_confirm_question" />
  7. <java-symbol type="string" name="global_action_reboot" />
  8. <java-symbol type="string" name="reboot_progress" />

E.最后编译
因为修改涉及到系统资源文件又涉及到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/services/java/     生成services.jar

步骤4.编译frameworks/base/policy,在同样目录下生成android.policy.jar 包

参考:

http://blog.csdn.net/zzp16/article/details/7829063

http://www.2cto.com/kf/201403/288710.html

android4.2添加重启菜单项相关推荐

  1. 使用API动态添加删除菜单项

    使用API动态添加删除菜单项 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, ...

  2. Ubuntu 添加右键菜单项

    经常遇到需要用某个脚本或可执行文件打开文件的情况,在 ubuntu 中,经常是 open-in-terminal,然后执行相应命令,想起之前一个工具的 readme 中处理过添加到右键的办法,查找一下 ...

  3. cmder全局添加右键菜单项

    以管理员身份运行Cmder,输入命令: cmder /register all

  4. Android 添加菜单项

    刚开始看郭大神的<>,实现以下里面的一些例子.利用Menu给APP添加一个菜单项. 效果图 结构图 在res的menu文件夹下创建一个xml文件,当然你也可以使用系统创建的main.xml ...

  5. 为Windows右键新建菜单添加菜单项

    [标题]:为Windows右键新建菜单添加菜单项 [时间]:2009-3-4 [摘要]:给新建菜单添加或删除一个菜单项,或者想可以新建自定义后缀文件类型的文件,本文是一个参考.如果"新建&q ...

  6. C# WPF 为Word右键添加自定义菜单项

    前提: 软件模块里用 WindowsFormsHost 嵌入Office Word,可操作Word 功能; Word表格内,鼠标右键,增加自定义的菜单项(如 "测试") 实现(粗暴 ...

  7. qt添加菜单纯代码_Qt Creator 插件开发(3):添加菜单项

    本章我们将学习如何向 Qt Creator 的菜单栏添加内容.在上一章插件的基础之上,我们将尝试开发一个比较正式的插件--在菜单栏中可以看到,并且可以相应用户动作等. 在我们开始之前,我们先来看看 Q ...

  8. qt添加菜单纯代码_QtCreator插件开发(二)——QtCreator菜单和菜单项

    QtCreator插件开发(二)--QtCreator菜单和菜单项 一.QtCreator菜单栏简介 1.QtCreator菜单简介 QtCreator菜单栏如下: QtCreator默认菜单包括&q ...

  9. access窗体中再制作查询窗体_如何给java窗体添加下拉菜单项,以选择游戏难度为例 - 攻向前端的小白...

    首先我们来介绍一下,以记事本为例,菜单栏中的[文件],[编辑]等全部叫一个菜单条:在Java中用JMenuBar表示: 菜单条中每一个具体的项叫做菜单,在Java中用JMenu表示: 菜单中的每一个项 ...

最新文章

  1. 如何完整迁移git仓库到另一个远程地址
  2. FastDFS安装、配置、部署(三)-Storage配置具体解释
  3. ubuntu “快捷方式”
  4. mysql的分页查询
  5. JS----Ajax中XMLHttpRequest常用方法及属性
  6. Snapchat, 给年轻人要的安全感
  7. LeetCode 1236. 网络爬虫(BFS/DFS)
  8. Linux下 -bash: php: command not found 命令找不到
  9. java 定义动态接口_使用自定义annotation接口进行aspectj动态缓存
  10. win7 gho封装教程
  11. JavaScript判断中英文字符
  12. java井字游戏_java井字棋源代码(双人对战版)
  13. Paper Reading||Overcoming Oscillations in Quantization-Aware Training
  14. 销售易CRM怎么样?
  15. 老A:抖音爆火的“弹幕互动游戏”是什么?该如何搭建直播间?
  16. Ubuntu安装KVM虚拟机
  17. 计算一个字节里有多少位为1
  18. 利用MyBatis实现CRUD操作
  19. LinuxProbe学习笔记(十一)
  20. 为什么Vue组件里面data必须是个函数

热门文章

  1. java后期发展方向_2020年前3季度工程自卸车市场咋样?后期朝啥方向发展?
  2. 004_Gson树模型
  3. linux x window system下载,为Ubuntu 添加 KDE X WINDOW SYSTEM
  4. Ubuntu系统安装VNC(VNCViewer)
  5. 关于计算机专业的求职信英文怎么说,计算机求职信范文英文3篇
  6. oracle 作业 断开原因,解惑 | Oracle JOB 异常中断原因分析
  7. mysql服务实例配置_MySQL多实例配置
  8. php打开并填充表单,php – 创建一个’机器人’来填充带有一些页面的表单
  9. Hadoop详解(七):YARYN完全分布式环境搭建
  10. 用c语言编写5颗骰子任意投掷总数为15 的概率,概率统计习题1period;2答案