android4.2添加重启菜单项
本文主要是针对android4.2关机菜单添加重启功能
A.关机提示
android4.2/frameworks/base/policy/src/com/android/internal/policy/impl/GlobalActions.java
- private void handleShow() {
- // 本函数不需要修改...
- awakenIfNecessary();
- mDialog = createDialog();
- prepareDialog();
- WindowManager.LayoutParams attrs = mDialog.getWindow().getAttributes();
- attrs.setTitle("GlobalActions");
- mDialog.getWindow().setAttributes(attrs);
- mDialog.show();// 关机选择对话框
- mDialog.getWindow().getDecorView().setSystemUiVisibility(View.STATUS_BAR_DISABLE_EXPAND);
- /****************
- 如果只需要关机确认可以修改为:
- awakenIfNecessary();
- mWindowManagerFuncs.shutdown(true);
- *******************/
- }
关机选项菜单 找到createDialog() 赋值power off那一项, 修改关机为: mWindowManagerFuncs.reboot(true);
- private GlobalActionsDialog createDialog() {
- ....// 省略
- // first: power off
- mItems.add(
- ....// 省略
- });
- /////////////////////////////////////////////////////////////////////////
- // second:reboot 添加这一项
- try {// 添加try catch 为了避免错误...
- mItems.add(
- new SinglePressAction(
- com.android.internal.R.drawable.ic_lock_power_off,
- R.string.global_action_reboot) {
- public void onPress() {
- // shutdown by making sure radio and power are handled accordingly.
- // mWindowManagerFuncs.rebootSafeMode(true);
- // mWindowManagerFuncs.reboot(mContext,null,false);
- // ShutdownThread.reboot(mContext,null,false);
- try {
- mWindowManagerFuncs.reboot(true);
- } catch (Exception e) {
- // TODO: handle exception 如果有问题, 最好在这里打印一些信息看看是不是这里出问题了
- }
- }
- public boolean showDuringKeyguard() {
- return true;
- }
- public boolean showBeforeProvisioning() {
- return true;
- }
- });
- } catch (Exception e) {
- // TODO: handle exception
- }
- }
- <pre name="code" class="java"> /////////////////////////////////////////////////////////////////////////
........//省略
B. 1) android4.2/frameworks/base/core/java/android/view/WindowManagerPolicy.java 找到WindowManagerFuncs这个interface的定义,增加如下function的声明:
- public interface WindowManagerFuncs {
- public void reboot(boolean confirm);
- }
2)
android4.2/frameworks/base/services/java/com/android/server/wm/WindowManagerService.java
找到shutdown()函数,在其后面添加reboot()函数,函数内容如下:
- // Called by window manager policy. Not exposed externally.
- @Override
- public void reboot(boolean confirm) {
- ShutdownThread.reboot(mContext, confirm);
- }
C. 修改关机时的进度框提示
android4.2/frameworks/base/services/java/com/android/server/power/ShutdownThread.java
- /*/
- //修改前:
- ……
- pd.setTitle(context.getText(com.android.internal.R.string.power_off));
- pd.setMessage(context.getText(com.android.internal.R.string.shutdown_progress));
- ……
- /*/
- //修改后:
- ……
- if(mReboot){ // reboot progress
- pd.setTitle(context.getText(com.android.internal.R.string.global_action_reboot));
- pd.setMessage(context.getText(com.android.internal.R.string.reboot_progress));
- }else{ // shutdown progress
- pd.setTitle(context.getText(com.android.internal.R.string.power_off));
- pd.setMessage(context.getText(com.android.internal.R.string.shutdown_progress));
- }
- ……
- //*/
D. 重启询问对话框 // 这部分可能代码不一样 不过都是修改shutdownInner函数里面的sConfirmDialog这个dialog的
- shutdownInner(final Context context, boolean confirm)//
- if(Settings.Global.getInt(context.getContentResolver(), Settings.Global.DEVICE_PROVISIONED, 1)==1 &&
- SystemProperties.getBoolean("ro.sys.bootfast", false)){
- ......
- // 这部分可能代码不一样 不过都是修改sConfirmDialog这个dialog的
- if(mReboot){
- idBootMode = com.android.internal.R.string.reboot_confirm_question;
- }else{
- idBootMode = com.android.internal.R.string.shutdown_confirm_question;
- }
- sConfirmDialog = new AlertDialog.Builder(context)
- .setTitle(mReboot
- ? com.android.internal.R.string.global_action_reboot
- : com.android.internal.R.string.power_off)
- .setMessage(idBootMode)
- .setPositiveButton(com.android.internal.R.string.yes, new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int which) {
- if(mPolicy!=null)
- mPolicy.acquireBAView();
- beginShutdownSequence(context);
- }
- })
- .setNegativeButton(com.android.internal.R.string.no, null)
- .create();
- }
/////////////////////说明 无关 只做注释///////////////////
// 下面这个函数会杀死所有的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参考其他的把自己的添加上:
- strings.xml:
- <string name="reboot_confirm_question">"Do you want to reboot?"</string>
- <string name="global_action_reboot">"Reboot"</string>
- <string name="reboot_progress">"Rebooting..."</string>
- symbols.xml
- <java-symbol type="string" name="reboot_confirm_question" />
- <java-symbol type="string" name="global_action_reboot" />
- <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添加重启菜单项的更多相关文章
- WijmoJS 以声明方式添加 Vue 菜单项
WijmoJS 以声明方式添加 Vue 菜单项 在V2019.0 Update2 的全新版本中,Vue框架下 WijmoJS 的前端UI组件功能得到再度增强. 如今,向wj菜单组件添加项的方法将不限于 ...
- EasyUI datagrid添加右键菜单项
js代码 //动态加载数据表格 function InitData() { $('#grid').datagrid({ url: '/Home/Query?r=' + Math.random(), / ...
- Eclipse扩展点实践之添加快捷菜单项(Command方式实现)
有两种方式,一种是Action的方式,另一种是Command的方式(这两种方式的区别详见:http://wiki.eclipse.org/FAQ_What_is_the_difference_betw ...
- Android 添加菜单项
刚开始看郭大神的<>,实现以下里面的一些例子.利用Menu给APP添加一个菜单项. 效果图 结构图 在res的menu文件夹下创建一个xml文件,当然你也可以使用系统创建的main.xml ...
- JCEF 如何修改右键菜单项(JCEF在右键菜单中添加开发者选项-show dev tools)
需求: 在界面的右键事件中添加一个打开开发者选项的菜单(Show Dev Tools) 所以我们可以看到的是在界面上右键,会有默认的一些菜单项(前进,后退,打印,查看源码),而这些功能并不一定是我们需 ...
- Windows下给鼠标右键菜单添加获得完全控制权限的菜单项
这段时间计算机C分区里多了很多无用的文件,而且不在同一个目录下,搜索出来删除的时候提示没有管理员权限,需要在右键属性里面修改,非常麻烦,于是查询了一下发现可以在文件右键菜单添加一个获取权限的菜单项,这 ...
- ecshop后台添加菜单项,权限问题
ecshop后台自定义菜单涉及到几个重要的权限控制的文件,先做如下总结: 后台添加菜单项,并设置权限的步骤.:(以在系统模块添加申请友链菜单为例)commn.php : \language ...
- VSTO 为Office已有右键菜单添加自己的菜单项(word,Excel)
原文:VSTO 为Office已有右键菜单添加自己的菜单项(word,Excel) private void AddRightMenu() { Microsoft ...
- 为Windows资源管理器右键菜单添加菜单项
为Windows资源管理器右键菜单添加菜单项 在Windows下命令行用的比较多,经常在资源管理器里翻到某个目录,若想要在此目录下跑命令,只能是打开cmd.exe,然后一路cd才能到达此目录. 每次都 ...
随机推荐
- 2 TileMapObject的使用
1 CCTMXObjectGroup的使用方法 为了取以下内容: 操作代码如下: T27TileMapObject.h #ifndef __T27TileMapObject_H__ #define _ ...
- windows下Eclipse操作MapReduce例子报错:Failed to set permissions of path: \tmp\hadoop-Jerome\mapred\staging\
windows下Eclipse操作MapReduce例子报错: 14/05/18 22:05:29 WARN util.NativeCodeLoader: Unable to load native- ...
- JAVA面向对象-----抽象类
1抽象类 为什么使用抽象类 1:定义Dog类 有颜色属性和叫的方法 2:定义Bird类 有颜色属性和叫的方法 3:定义其父类Animal 1:颜色的属性可以使用默认初始化值. 2:叫的方法在父类中如何 ...
- Retrofit 2.0 超能实践(三),轻松实现文件/多图片上传/Json字符串
文:http://blog.csdn.net/sk719887916/article/details/51755427 Tamic 简书&csdn同步 通过前两篇姿势的入门 Retrofit ...
- 剑指Offer——回溯算法
剑指Offer--回溯算法 什么是回溯法 回溯法实际是穷举算法,按问题某种变化趋势穷举下去,如某状态的变化用完还没有得到最优解,则返回上一种状态继续穷举.回溯法有"通用的解题法"之 ...
- UNIX网络编程——套接字选项(setsockopt)
setsockopt的一些用法: close socket(一般不会立即关闭而经历TIME_WAIT的过程)后想继续重用该socket: BOOL bReuseaddr=TRUE; setsockop ...
- UNIX环境高级编程——记录上锁(fcntl函数)以及死锁检测
一.记录锁 record locking 功能:当一个进程正在读或修改文件的某个部分时,它可以阻止其它进程修改同一文件区. 字节范围锁 byte-range locking 二.历史 flock函数, ...
- UML 类图. 对象图. 接口图. 用例图 .包,参与者. 依赖关系. 泛化/继承关系. 关联关系 .聚合/聚集关系. 实现关系 组合关系。
结构元素 结构元素包括,类,对象,接口,用例,参与者. 类图 类图图示 类图是UML中最基本的元素了吧?根据OO的思想"天下一切皆对象",而类是对象的抽象. 左 ...
- UICollectionView请求网络数据显示(Text)
TEXT: AppDelegate.m self.window.rootViewController = [[[UINavigationController alloc]initWithRootVie ...
- javascript之BOM地址栏对象(Location)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...