android 4.12 定制Restart功能

        最近客户发现我们的机器没有长按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方法
 
@Override
	public 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了!希望有帮助~如果不行的话可以在交流~~

 




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值