本文主要是针对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. x264源代码简单分析:x264命令行工具(x264.exe)

    ===================================================== H.264源代码分析文章列表: [编码 - x264] x264源代码简单分析:概述 x26 ...

  2. 剑指Offer——美团内推+校招笔试题+知识点总结

    剑指Offer--美团内推+校招笔试题+知识点总结 前言 美团9.9内推笔试.9.11校招笔试,反正就是各种虐,笔试内容如下: 知识点:图的遍历(DFS.BFS).进程间通信.二叉查找树节点的删除及中 ...

  3. 与音频相关的技术知识点总结(Linux方向的开发)

    几个术语和概念: 1.       关于PCM的 PCM是Pulse code modulation的缩写,它是对波形最直接的编码方式.它在音频中的地位可能和BMP在图片中的地位有点类似吧. Samp ...

  4. C++对象模型的那些事儿之一:对象模型(上)

    前言 很早以前就听人推荐了<深入理解C++对象模型>这本书,从年初买来到现在也只是偶尔翻了翻,总觉得晦涩难懂,放在实验室上吃灰吃了好久.近期由于找工作对C++的知识做了一个全面系统的学习, ...

  5. Andriod Studio科普篇——3.关于gradle插件的常见问题

    1.andriod gradle插件版本过低. 出错位置: dependencies{ classpath 'com.android.tools.build:gradle:0.10.2' } 提示信息 ...

  6. Android数据库框架——ORMLite轻量级的对象关系映射(ORM)Java包

    Android数据库框架--ORMLite轻量级的对象关系映射(ORM)Java包 事实上,我想写数据库的念头已经很久了,在之前写了一个答题系统的小项目那只是初步的带了一下数据库,数据库是比较强大的, ...

  7. 【Unity Shaders】Reflecting Your World —— Unity3D中的遮罩反射(Masking Reflections)

    本系列主要参考<Unity Shaders and Effects Cookbook>一书(感谢原书作者),同时会加上一点个人理解或拓展. 这里是本书所有的插图.这里是本书所需的代码和资源 ...

  8. Cocos2D:塔防游戏制作之旅(三)

    整合炮塔资源 为了快速开始,我们为你创建了开始的项目.它包括了一个空白的Cocos2D项目以及大多数你将在教程中使用到的资源. 所以首先下载该 开始项目 并且解压缩到你指定的位置中去. 注意:该项目的 ...

  9. 【一天一道LeetCode】#100. Same Tree(100题大关)

    一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Given t ...

  10. Gradle笔记——依赖管理基础

    1. 什么是依赖管理 依赖管理可以分为两部分:一是依赖,即项目构建或运行时所需要的一些文件:二是发布,即构建完成后上传到某个地方. 1.1 依赖 大部分的项目都需要第三方库类或项目文件,这些文件就是项 ...