如何在setting中的休眠模式下添加永不休眠功能?

[DESCRIPTION]

如何在setting中的休眠模式下添加永不休眠功能?

[SOLUTION]
 
 一、JB2之前版本

      在JB2之前的code(就是android4.2之前的code),请参考如下的修改:

alps\frameworks\base\packages\SettingsProvider\res\values\defaults.xml中设置def_screen_off_timeout为-1,即

<integer name="def_screen_off_timeout">-1</integer>

同时请注意,经由下面的操作,setting里面休眠时间的Never菜单才会出来:

修改alps\packages\apps\Settings\res\values\arrays.xml:

 <!-- Display settings.  The delay in inactivity before the screen is turned off. These are shown ain a list dialog. -->

    <string-array name="screen_timeout_entries">

        <item>15 seconds</item>

        <item>30 seconds</item>

        <item>1 minute</item>

        <item>2 minutes</item>

        <item>10 minutes</item>

        <item>30 minutes</item>

        <item>never</item>

    </string-array>

 

    <!-- Do not translate. -->

   <string-array  name="screen_timeout_values" translatable="false">

        <!-- Do not translate. -->

        <item>15000</item>

        <!-- Do not translate. -->

        <item>30000</item>

        <!-- Do not translate. -->

        <item>60000</item>

        <!-- Do not translate. -->

        <item>120000</item>

        <!-- Do not translate. -->

        <item>600000</item>

        <!-- Do not translate. -->

        <item>1800000</item>

         <item>-1</item>

    </string-array>

    修改对比语言value文件夹下的arrays.xml, 修改screen_timeout_entries对应的翻译。不用管那个msgid,只是google用来表示是他自己的资源而已,直接添加<item >"不灭"</item>即可,请知悉。

 

二、JB2版本

   若是android4.2的code,请在前面的修改基础上再修改下面的代码:

PowerManagerService.java

private void updateUserActivitySummaryLocked(long now, int dirty) {

.....

 

//change code here ==============

                      Slog.d(TAG,"mScreenOffTimeoutSetting ="+mScreenOffTimeoutSetting);

                      //if (mUserActivitySummary != 0 ) {

                if (mUserActivitySummary != 0 && mScreenOffTimeoutSetting > 0) {

//change code here  end ==============

                    Message msg = mHandler.obtainMessage(MSG_USER_ACTIVITY_TIMEOUT);

                    msg.setAsynchronous(true);

                    mHandler.sendMessageAtTime(msg, nextTimeout);

                }

 
 三、L版本
(1)添加settings中的菜单与之前一样
(2)额外修改private void updateUserActivitySummaryLocked(long now, int dirty) {
...
if(mScreenOffTimeoutSetting != -1){

if (mUserActivitySummary != 0 && nextTimeout >= 0 ) {

Message msg = mHandler.obtainMessage(MSG_USER_ACTIVITY_TIMEOUT);

msg.setAsynchronous(true);

mHandler.sendMessageAtTime(msg, nextTimeout);

}

}else {

mUserActivitySummary |= USER_ACTIVITY_SCREEN_BRIGHT;

}
...
}
 
 四、M&N版本
(1)添加settings中的菜单,但注意screen_off_timeout在M上不允许为-1,否则会产生JE。可修改为0。       
(2)与L版本第二步一致,只是修改判断的是否为0:
private void updateUserActivitySummaryLocked(long now, int dirty) {
...
if(mScreenOffTimeoutSetting != 0){

if (mUserActivitySummary != 0 && nextTimeout >= 0 ) {

Message msg = mHandler.obtainMessage(MSG_USER_ACTIVITY_TIMEOUT);

msg.setAsynchronous(true);

mHandler.sendMessageAtTime(msg, nextTimeout);

}

}else {

mUserActivitySummary |= USER_ACTIVITY_SCREEN_BRIGHT;

}
...
}
 
(3)按照上述两步修改,是可以实现永不灭屏,但有个side-effect,设置永不休眠和keyguard的安全锁后,闹钟响应时闪屏,闪屏是因为keyguard在闹钟唤醒时会被调起。引起L和M的差别是在PhoneWindowManager.java中
private void updateLockScreenTimeout() {
...........
if (enable) {
if (localLOGV) Log.v(TAG, "setting lockscreen timer");
       mHandler.postDelayed(mScreenLockTimeout, mLockScreenTimeout);

其中L上永不休眠时 mLockScreenTimeout是-1,所以这个ScreenLockTimeout子线程不会被执行,也就不会去锁屏。而M上由于mLockScreenTimeout等于0,所以立即锁屏,就会出现一下锁屏的画面。
 
所以再将此函数修改如下:
 
private void updateLockScreenTimeout() {
      synchronized (mScreenLockTimeout) {
      boolean enable = (mAllowLockscreenWhenOn && mAwake &&
      mKeyguardDelegate != null && mKeyguardDelegate.isSecure());
     if (mLockScreenTimerActive != enable) {
     if (enable) {
     if (localLOGV) Log.v(TAG, "setting lockscreen timer");
             //add mtk
            if(mLockScreenTimeout!=0){
                     mHandler.postDelayed(mScreenLockTimeout, mLockScreenTimeout);}
            // end mtk

     } else {
             if (localLOGV) Log.v(TAG, "clearing lockscreen timer");
             mHandler.removeCallbacks(mScreenLockTimeout);
      }
          mLockScreenTimerActive = enable;
       }
 }
 }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值