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

A.关机提示

android4.2/frameworks/base/policy/src/com/android/internal/policy/impl/GlobalActions.java

[java] view
plain
copy

  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
plain
copy

  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
plain
copy

  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
plain
copy

  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
plain
copy

  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的

  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
plain
copy

  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. WijmoJS 以声明方式添加 Vue 菜单项

    WijmoJS 以声明方式添加 Vue 菜单项 在V2019.0 Update2 的全新版本中,Vue框架下 WijmoJS 的前端UI组件功能得到再度增强. 如今,向wj菜单组件添加项的方法将不限于 ...

  2. EasyUI datagrid添加右键菜单项

    js代码 //动态加载数据表格 function InitData() { $('#grid').datagrid({ url: '/Home/Query?r=' + Math.random(), / ...

  3. Eclipse扩展点实践之添加快捷菜单项(Command方式实现)

    有两种方式,一种是Action的方式,另一种是Command的方式(这两种方式的区别详见:http://wiki.eclipse.org/FAQ_What_is_the_difference_betw ...

  4. Android 添加菜单项

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

  5. JCEF 如何修改右键菜单项(JCEF在右键菜单中添加开发者选项-show dev tools)

    需求: 在界面的右键事件中添加一个打开开发者选项的菜单(Show Dev Tools) 所以我们可以看到的是在界面上右键,会有默认的一些菜单项(前进,后退,打印,查看源码),而这些功能并不一定是我们需 ...

  6. Windows下给鼠标右键菜单添加获得完全控制权限的菜单项

    这段时间计算机C分区里多了很多无用的文件,而且不在同一个目录下,搜索出来删除的时候提示没有管理员权限,需要在右键属性里面修改,非常麻烦,于是查询了一下发现可以在文件右键菜单添加一个获取权限的菜单项,这 ...

  7. ecshop后台添加菜单项,权限问题

    ecshop后台自定义菜单涉及到几个重要的权限控制的文件,先做如下总结: 后台添加菜单项,并设置权限的步骤.:(以在系统模块添加申请友链菜单为例)commn.php       : \language ...

  8. VSTO 为Office已有右键菜单添加自己的菜单项(word,Excel)

    原文:VSTO 为Office已有右键菜单添加自己的菜单项(word,Excel) private void AddRightMenu()         {            Microsoft ...

  9. 为Windows资源管理器右键菜单添加菜单项

    为Windows资源管理器右键菜单添加菜单项 在Windows下命令行用的比较多,经常在资源管理器里翻到某个目录,若想要在此目录下跑命令,只能是打开cmd.exe,然后一路cd才能到达此目录. 每次都 ...

随机推荐

  1. Afinal加载网络图片及下载文件使用方法

    Afinal快速开发框架使用起来非常方便,下面将讲解如何利用Afinal加载网络图片及下载文件: 先看效果图: 注意:使用Afinal前需添加Afinal的jar,可以在这里下载:http://dow ...

  2. T-SQL动态查询(1)——简介

    起因: 由于最近工作需要及过去一直的疑问,所以决定着手研究一下动态SQL.由于离开一线开发有点年头了,很多技巧性的东西没有过多研究,作为DBA和<SQL Server性能优化与管理的艺术> ...

  3. 使用Java正则表达式去掉Double类型的数据后面多余的0

    方法 /** * 使用java正则表达式去掉多余的.与0 * @param s * @return */ public static String subZeroAndDot(String s){ i ...

  4. iOS中 Realm的学习与使用 韩俊强的博客

    每日更新关注:http://weibo.com/hanjunqiang  新浪微博! 有问题或技术交流可以咨询!欢迎加入! 这篇直接搬了一份官方文档过来看的 由于之前没用markdown搞的乱七八糟的 ...

  5. Cocos2D中的纹理(textures)的解释

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...

  6. Java进阶(三十三)java基础-filter

    java基础-filter 我们先看看没有filter的时候,整个web客户端-服务端的一个流程. 接下来我们再看看引入了filter之后的Uml图.尝试分析这两者之间的差别. filter从哪里来? ...

  7. 不窃取用户隐私的搜索引擎: DuckDuckGo

    不窃取用户隐私的搜索引擎: DuckDuckGo https://duckduckgo.com/ 最近goggle不给力, baidu搜出来的很多都是垃圾, bing用久了很烦. 于是用上了DuckD ...

  8. 调用awk的三种方式

    调用awk的三种方式 调用awk有三种方式,一种为Shell命令行方式,另外两种是将awk程序写入脚本文件,然后执行该脚本文件.三种方式的命令格式归纳如下: 一.在Shell命令行输入命令调用awk, ...

  9. Linux Debugging(三): C++函数调用的参数传递方法总结(通过gdb+反汇编)

    上一篇文章<Linux Debugging:使用反汇编理解C++程序函数调用栈>没想到能得到那么多人的喜爱,因为那篇文章是以32位的C++普通函数(非类成员函数)为例子写的,因此只是一个特 ...

  10. pig基础知识总结

    Pig Latin UDF语句 REGISTER   在Pig运行时环境中注册一个JAR文件 DEFINE      为UDF.流式脚本或命令规范新建别名 Pig Latin命令类型 kill    ...