您的位置:首页 > 其它

安卓M版本如何在setting中的休眠模式下添加永不休眠功能?

2016-11-30 09:23 1021 查看
在alps\frameworks\base\packages\SettingsProvider\res\values\defaults.xml中设置def_screen_off_timeout为0,即
<integer name="def_screen_off_timeout">0</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>即可,请知悉。

(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;

       }

 }

 }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐