android 4.12 定制Restart功能
来源:互联网 发布:discuz源码安装 编辑:程序博客网 时间:2024/06/01 09:29
最近客户发现我们的机器没有长按power按钮重启手机的功能,就对我们说研发说你们看看人家三星做的多好 ,你们咋就不自觉给我加上这些功能呢!非要我们提出~~我去你大爷的,你这坑爹的!你不说我怎么你要呢~想要你就说嘛!客户就是上帝,不解释废话就不多说了~抓紧时间Coding
在这先要感谢zzp16 http://blog.csdn.net/zzp16/article/details/7829063这篇博文的指导,写的很详细在android4.0的机器是尝试了都是ok的 但是新的android4.12平台不行,所以自己又研究了下!现在讲自己在android4.12上做的Restart功能分享下,希望给大家有帮助~不会分享的程序员不是好程序员!!!
长按Power键相关代码
首先要了解长按电源键弹出对话框的相关源码位置,通过跟踪找到PhoneWindowManager.java中有截断长按电源键的方法,继续跟踪代码找到Runnable mPowerLongPress = new Runnable(),在该runnable里边调用showGlobalActionsDialog()方法便是显示长按power键弹出的关机提示对话框,如果你的机器是原生态的,默认提示“飞行模式”,“静音”和“关机”选项。
showGlobalActionsDialog创建关机对话框的代码在GlobalActions.java里边,主要代码如下:
private AlertDialog createDialog() { …… mItems = new ArrayList<Action>(); // first: power off mItems.add( new SinglePressAction( com.android.internal.R.drawable.ic_lock_power_off, R.string.global_action_power_off) { public void onPress() { // shutdown by making sure radio and power are handled accordingly. ShutdownThread.shutdown(mContext, true); } public boolean showDuringKeyguard() { return true; } public boolean showBeforeProvisioning() { return true; } }); // next: airplane mode mItems.add(mAirplaneModeOn); // last: silent mode if (SHOW_SILENT_TOGGLE) { mItems.add(mSilentModeAction); } …… }
直接在GlobalActions.java的createDialog方法中加入重启的按钮如下代码即可:
mItems.add( new SinglePressAction( com.android.internal.R.drawable.ic_lock_power_off, R.string.global_action_reboot) { public void onPress() { // reboot mWindowManagerFuncs.reboot(); } public boolean showDuringKeyguard() { return true; } public boolean showBeforeProvisioning() { return true; } });
注意onPress()中的mWindowManagerFuncs.reboot()方法!因为在android 4.12 中import com.android.server.pm.ShutdownThread;这个类未公开不能直接引用~所以这个功能变的复杂了呢!但是这都阻止不了一个程序员前进的脚步~此路不通咋就换个路呗!
研究后我用了mWindowManagerFuncs.reboot()这个方法。先在WindowManagerPolicy.java中添加reboot()方法
public void shutdown(boolean confirm);+ public void reboot(); public void rebootSafeMode();
在WindowManagerService.java里面调用reboot方法
@Overridepublic void reboot(){ShutdownThread.reboot(mContext,null,false);};
在这个里面import com.android.server.pm.ShutdownThread 就可以直接引用了 转了一圈还是用这个方法!哎~就是为了你~我翻山越岭啊 !
最后我们在ShutdownThread.java的beginShutdownSequence(context)方法中代码修改如下:
/*/ //修改前: …… 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)); } …… //*/
<string name="global_action_reboot">Reboot system</string> <string name="global_action_reboot_progress">"Reboot processes..."</string><string name="global_action_reboot">重启手机</string> <string name="global_action_reboot_progress">"正在重启手机..."</string>
添加多语言的字符串就不要多说了~
最后编译下framework 烧到机器里面 重启下机器~打完收工了!
附录:
本例源码以Android 4.12为准,修改重启相关的源码路径:
frameworks/base/core/java/android/view/WindowManagerPolicy.java
frameworks/base/policy/src/com/android/internal/policy/impl/GlobalActions.java
frameworks/base/services/java/com/android/server/pm/ShutdownThread.java
frameworks/base/services/java/com/android/server/wm/WindowManagerService.java
ok了!希望有帮助~如果不行的话可以在交流~~
- android 4.12 定制Restart功能
- 关于Oracle Restart功能
- android restart reason机制
- android restart reason机制
- android restart reason机制
- 为Android系统定制重启功能
- 为Android系统定制重启功能
- Mtk Android 暗码格式定制功能
- 为Android系统定制重启功能
- android系统定制功能:定时重启
- restart
- Restart
- Restart
- Restart
- restart
- Android 找不到或restart adb
- I restart to learn Android
- Android系统定制----删除系统锁屏功能
- ubuntu更新软件包存放目录
- 如何在SAS中重新构建限价指令簿(Limit Order Book):使用HashTable
- linux下c语言实现多线程文件复制
- [phpMyadmin笔记-1] MySQL数据库操作
- 面试题6:重建二叉树
- android 4.12 定制Restart功能
- 网站无法访问,报错Server Application Unavailable的问题
- 点击通知栏图标、桌面图标会导致应用重启
- SOCK_STREAM与SOCK_DGRAM套接口类型
- dede 自动审核功能的实现
- VIM命令退出
- WebService涉及的主要概念
- OOAD笔记九
- Tomcat Can't load AMD 64-bit .dll on a IA 32