天天看点

Android系统移植与调试之------->如何修改Android设备添加重启、飞行模式、静音模式等功能(二)

今天要说的是为Android设备添加重启、飞行模式、静音模式按钮,客户需求中需要添加这项功能,在长按电源键弹出的菜单中没有这些选项,谨以此文记录自己添加这个功能的过程。

首先找到长按电源键弹出的对话框,在frameworks\base\policy\src\com\android\internal\policy\impl\GlobalActions.java文件中,修改createDialog()方法。

Android系统移植与调试之------->如何修改Android设备添加重启、飞行模式、静音模式等功能(二)
Android系统移植与调试之------->如何修改Android设备添加重启、飞行模式、静音模式等功能(二)
Android系统移植与调试之------->如何修改Android设备添加重启、飞行模式、静音模式等功能(二)

在GlobalActionsDialog方法可以看 mItems.add这个方法是添加菜单选项的,该菜单的添加的第一个选项就是关机选项。可以仿照关机的Item添加一个重启的选项,如上面的代码所示;这样就解决了在长按的电源键弹出的对话框中添加一个重启选项了。当然这仅仅是添加一个显示而已,接下来就为这个选项添加逻辑控制代码了。

在上面的代码中使用的mWindowManagerFuncs.reboot方法和R.string.global_action_reboot资源(资源的添加放到最后说),默认是不存在的,所以需要在自己手动添加。

2、首先在找到WindowManagerFuncs这个所在的位置,在frameworks\base\core\java\android\view\WindowManagerPolicy.java中

Android系统移植与调试之------->如何修改Android设备添加重启、飞行模式、静音模式等功能(二)
Android系统移植与调试之------->如何修改Android设备添加重启、飞行模式、静音模式等功能(二)

添加reboot方法。但这只是添加接口而已,它的具体实现在呢?找了许久在frameworks\base\services\java\com\android\server\wm\windowManagerService.java中找到了这个接口的实现。

Android系统移植与调试之------->如何修改Android设备添加重启、飞行模式、静音模式等功能(二)
Android系统移植与调试之------->如何修改Android设备添加重启、飞行模式、静音模式等功能(二)

在该类中加入reboot()方法,该方法调用ShutdownThread的reboot方法

同样在仿照关机的原理添加reboot的具体实现代码,既然在ShutdownThread这个类中提供了shutdown和rebootSafeMode的方法,那按理也应该有reboot的方法,或者类似reboot的方法。找到Shutdown.java文件,在frameworks\base\services\java\com\android\server\power\ShutdownThread.java中,

Android系统移植与调试之------->如何修改Android设备添加重启、飞行模式、静音模式等功能(二)
Android系统移植与调试之------->如何修改Android设备添加重启、飞行模式、静音模式等功能(二)

其中提供了一个静态的reboot方法,所以在windowManagerService.java中的reboot实现中直接调用ShutdownThread中reboot即可。

 public static void reboot(final Context context, String reason, boolean confirm);有三个参数,后两个参数解释如下: reason  如果值为是null,正常重启;如果是recovery,系统重启进入recovery mode ;confirm为true显示关机提示框,需要用户【确认】;false不显示提示框,直接关机。

到此重启功能基本上可以使用了(除资源还没有添加之外),但是此时选择重启选项时,其提示还是不够关机的提示,所以还要修改选择“重启”时的对话框的提示。

在frameworks\base\services\java\com\android\server\pm\ShutdownThread.java中

修改shutdownInner方法

Android系统移植与调试之------->如何修改Android设备添加重启、飞行模式、静音模式等功能(二)
Android系统移植与调试之------->如何修改Android设备添加重启、飞行模式、静音模式等功能(二)

至此关于代码部分的改动全部完成,接下就添加需要添加使用到的资源了,就是其中使用的字符串,为了简单起见就添加了英文和简体中文:

在对应的资源文件中添加:

frameworks\base\core\res\res\values\strings.xml

Android系统移植与调试之------->如何修改Android设备添加重启、飞行模式、静音模式等功能(二)

frameworks\base\core\res\res\values-zh-rCN\strings.xml

现在已经添加了好这些资源,但是现在还不能使用,此时编译会出现找不到该资源的错误,还需要在frameworks\base\core\res\res\values\public.xml文件中进行资源声明:

Android系统移植与调试之------->如何修改Android设备添加重启、飞行模式、静音模式等功能(二)

最后还得确认 framework/base/core/res/res/values/config.xml文件中的config_longPressOnPowerBehavior属性变成1

Android系统移植与调试之------->如何修改Android设备添加重启、飞行模式、静音模式等功能(二)
Android系统移植与调试之------->如何修改Android设备添加重启、飞行模式、静音模式等功能(二)

最后重新编译即可

==================================================================================================

  作者:欧阳鹏  欢迎转载,与人分享是进步的源泉!

继续阅读