本文主要是针对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. iOS下JS与OC互相调用(七)--Cordova 基础

    Cordova 简介 在介绍Cordova之前,必须先提一下PhoneGap.PhoneGap 是Nitobi软件公司2008年推出的一个框架,旨在弥补web 和iOS 之间的不足,使得web 和 i ...

  2. EBS销售订单挑库发放处理程序

    来自:http://blog.csdn.net/cunxiyuan108/article/details/6014769 在EBS实施中,经常遇到从外部传进来一个被登记的销售订单,需要通过程序进行销售 ...

  3. ProgressBar的简单使用

    当我们的应用在进行耗时操作时,显示一个进度条呈现给用户,让用户知道当前进度是一个很好的体验,接下来我们就来简单了解下ProgressBar(本文主要针对初学者,大神可以绕开啦),先看效果图: 进度条P ...

  4. Java基本语法-----java运算符的优先级与结合性

    这是本人以前的上学期间java 运算符这块知识的总结的,截图存到了word里,大家将就看下吧(不会用Markdown的表格 不然就在写一遍了 T T). [正在看本人博客的这位童鞋,我看你气度不凡,谈 ...

  5. Servlet之cookie处理

    Cookies 通常设置在 HTTP 头信息中(虽然JavaScript 也可以直接在浏览器上设置一个 Cookie).设置 Cookie 的 Servlet 会发送如下的头信息: HTTP/1.1 ...

  6. 两种配置大数据环境的方法Ambari以及hadoop源代码安装的步骤

    1.Ambari安装 Ambari & HDP(Hortonworks Data Platform) ********************************************* ...

  7. C++ string类型占几个字节

          在C语言中我们操作字符串肯定用到的是指针或者数组,这样相对来说对字符串的处理还是比较麻烦的,好在C++中提供了 string 类型的支持,让我们在处理字符串时方便了许多.这篇文章并不是讲解 ...

  8. 百度地图隐藏缩放控件比例尺Logo

    对于百度地图最新版V3.7.3,以前的隐藏控件方法失效,可用以下方法隐藏: 1.隐藏缩放控件: mMapView.showZoomControls(false); 2.隐藏比例尺: mMapView. ...

  9. 07 总结ProgressDialog 异步任务

    1,ProgressDialog     >        //使用对象  设置标题             progressDialog.setTitle("标题");   ...

  10. Dynamics CRM 2015Online Update1 new feature之表单页Tabs切换

    CRM2011的界面相对于CRM4.0进行了比较大的改动,N久没见过4.0的界面了所以忘了表单是什么样子的了,但2011的表单中若含有多个tab的话,是可以通过左侧栏进行切换,话说2013的界面相对2 ...