基于Dragonboard 410c的屏幕常亮设置

    不知道有没有遇到过这样的问题,就是在跑一些应用的时候,屏幕熄灭后会顺便把一些服务给关掉,这时候就需要重新开启,虽然有时候这本身就是一个bug,但是最直接的方法就是让屏幕一直亮着,虽然说这就引入了另外一个bug,但还是看了一下。

     如果你需要屏幕不是一直亮着,但是又需要亮屏的时间长一些,最简单的方法就是,在settings->display里面将时间设为30min,这是设置的最长时间了,如果你需要更长的时间怎么办呢,可以按照下面的方法进行配置。

    代码路径:frameworks/base/services/core/java/com/android/server/power/PowerManagerService.java

   在文件中找到函数:updatePowerStateLocked()

    这个函数的主要作用是进行电源状态的转换,所以屏幕的亮灭可以由这个函数来控制了。

private void updatePowerStateLocked() {

   if (!mSystemReady || mDirty == 0) {
               return;
           }
           if (!Thread.holdsLock(mLock)) {
               Slog.wtf(TAG, "Power manager lock was not held when calling updatePowerStateLocked");
           }
  
           Trace.traceBegin(Trace.TRACE_TAG_POWER, "updatePowerState");
           try {

               updateIsPoweredLocked(mDirty);
               updateStayOnLocked(mDirty);
               updateScreenBrightnessBoostLocked(mDirty);

               final long now = SystemClock.uptimeMillis();
               int dirtyPhase2 = 0;
               for (;;) {
                   int dirtyPhase1 = mDirty;
                   dirtyPhase2 |= dirtyPhase1;
                   mDirty = 0;
  
                   updateWakeLockSummaryLocked(dirtyPhase1);
                   updateUserActivitySummaryLocked(now, dirtyPhase1);
                   if (!updateWakefulnessLocked(dirtyPhase1)) {
                       break;
                   }
               }

               boolean displayBecameReady = updateDisplayPowerStateLocked(dirtyPhase2);

               updateDreamLocked(dirtyPhase2, displayBecameReady);
  
               finishWakefulnessChangeIfNeededLocked();
  

               updateSuspendBlockerLocked();
           } finally {
               Trace.traceEnd(Trace.TRACE_TAG_POWER);
           }
       }

这里调用了updateScreenBrightnessBoostLocked(mDirty)

private void updateScreenBrightnessBoostLocked(int dirty) {
           if ((dirty & DIRTY_SCREEN_BRIGHTNESS_BOOST) != 0) {
               if (mScreenBrightnessBoostInProgress) {
                   final long now = SystemClock.uptimeMillis();
                   mHandler.removeMessages(MSG_SCREEN_BRIGHTNESS_BOOST_TIMEOUT);
                   if (mLastScreenBrightnessBoostTime > mLastSleepTime) {
                       final long boostTimeout = mLastScreenBrightnessBoostTime +
                               SCREEN_BRIGHTNESS_BOOST_TIMEOUT;
                       if (boostTimeout > now) {
                           Message msg = mHandler.obtainMessage(MSG_SCREEN_BRIGHTNESS_BOOST_TIMEOUT)     ;
                           msg.setAsynchronous(true);
                           mHandler.sendMessageAtTime(msg, boostTimeout);
                           return;
                       }
                   }
                   mScreenBrightnessBoostInProgress = false;
                  mNotifier.onScreenBrightnessBoostChanged();
                   userActivityNoUpdateLocked(now,
                           PowerManager.USER_ACTIVITY_EVENT_OTHER, 0, Process.SYSTEM_UID);
               }
           }
     }           


其实说了半天很简单,就是不让它进行屏幕超时的操作,只需要进行下面修改即可

private void updatePowerStateLocked() {

    return;

}

直接返回,不进行任何动作,然后在android目录下执行:

source build/envsetup.sh

lunch 23

mmm frameworks/base/services/

将会生成:out/target/product/msm8916_64/system/framework/services.jar

最后用生成的services.jar替换设备里的即可

adb root

adb remount

adb push services.jar /system/framework/services.jar

重启生效

当然,实现屏幕常亮的方法有很多,这只是其中一种。








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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值