本文主要是针对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. Linux下文件和文件夹操作命令详解

    花了两个小时的时间,把文件和文件夹相关的常用命令:创建.删除.移动.复制.查找.重命名在linux上测试了一把,总结下来.文件夹的这些基本操作是要多注意的,一不小心就达不到你想要的效果. 文件夹操作: ...

  2. 利用CocoaHTTPServer实现wifi局域网传输文件到iphone

    背景 近日在做一个代码阅读器,其中涉及到代码文件的上传,之前看到过许多app支持局域网传文件,因此就通过查询和研究实现了此功能,我是用的框架是CocoaHTTPServer. 原理 CocoaHTTP ...

  3. redhat7 上安装dummynet

    更多请访问 http://www.webpersonaldeveloper.cn 摘要: 在redhat 上部署dummynet 需要将ipfw 编译为内核模块,而ipfw需要调用linux kern ...

  4. android 获取SD卡的图片及其路径

    1.首先是intent的设置: private static final int IMAGECODE = 0; Intent imageIntent = new Intent(Intent.ACYIO ...

  5. Dynamics CRM2015 非基础语言环境下产品无法新建的问题

    该现象出现在2015版本上,之前从没注意过这个问题不知道以前的版本是否存在. 我的安装包的基础语言是中文,第一张图有添加产品的按钮,切换到英文环境下后就没有了,一开始以为是系统做了隐藏处理,但用工具查 ...

  6. java模拟链表

          java语言不存在指针,但是我们仍可以用相应的逻辑模拟链表的实现,下面这段代码就是我的一个小伙伴实现的: package com.brucezhang.test; public class ...

  7. React实现动画效果

    流畅.有意义的动画对于移动应用用户体验来说是非常必要的.和React Native的其他部分一样,动画API也还在积极开发中,不过我们已经可以联合使用两个互补的系统:用于全局的布局动画LayoutAn ...

  8. 还在繁琐的敲MVP接口和实现类吗,教你一秒搞定。

    只有程序员懒起来,才能提高开发效率 233333 在MVP的使用过程中,我们需要反复的去写各种MVP的接口和实现类, 实在是 太麻烦了!!所以抽时间撸了一款插件(只可用于Intellj IDEA 和 ...

  9. Java中Integer和String浅谈

    Java中的基本数据类型有八种:int.char.boolean.byte.long.double.float.short.Java作为一种面向对象的编程语言,数据在Java中也是一种对象.我们用基本 ...

  10. Eclpse 标准版,在联想一体机上报 eclipse failed to create the java virtual machine

    环境:联想一体机 IdearCentre B320I, XP系统  32位操作系统 下载了最新的JDK和Eclipse标准版,安装之后,启动eclipse报错 这个错误,以前还真没有遇到过,网上搜了下 ...