设置屏保启动时间

问题背景

在android OTT产品中有一个功能为屏幕保护程序(Screen Saver),该功能在各种电子产品的屏幕空闲(即用户不进行任何操作)时,通过显示移动的图片或图案来防止屏幕因长时间静止显示同一画面而导致的老化或损坏。无操作后屏保启动的时间是可以选择的,现在是在setting应用程序内部写死几个值给用户进行选择,即不是用户自定义的。在OTT开发过程中遇到需新增或者修改屏保启动时间的需求,以及到时间后屏保没有启动的问题。

问题分析与解决

将屏保定时新增或者修改其他时间

OTT的屏保时间一般都在setting中进行预设几个常见值,以供用户选择。这些值在setting代码arrays.xml文件的关于dream的字符串数组中,例如增加1分钟和5分钟休眠的选项,如下所示,其中dream_timeout_values表示的ms:

     <string-array name="dream_timeout_entries">
+        <item>1 minutes</item>
+        <item>5 minutes</item>
        <item>15 minutes</item>
        <item>30 hour</item>
        <item>1 hours</item>
        <item>Never</item>
     </string-array>

     <string-array name="dream_timeout_values" translatable="false">
+        <item>60000</item>
+        <item>300000</item>
        <item>900000</item>
        <item>1800000</item>
        <item>3600000</item>
        <item>2147483647</item>
     </string-array>

屏保到时间后没有正常启动

通过日志可以查看到屏保启动时,走的流程是PowerManagerService.java中的dreaming...,并启动预设的屏保web程序。

08-28 17:16:30.055   483   527 I PowerManagerService: Napping display group (groupId=0, uid=1000)...
08-28 17:16:30.055   483   527 I PowerManagerService: Nap time (uid 1000)...
08-28 17:16:30.057   483   527 I DreamManagerService: Entering dreamland.
08-28 17:16:30.058   483   527 I PowerManagerService: Dreaming...
08-28 17:16:30.062   483   502 I DreamController: Starting dream: name=ComponentInfo{com.android.dreams.web/com.android.dreams.web.Screensaver}, isTest=false, canDoze=false, userId=0

通过梳理代码可知,关键函数为:shouldNapAtBedTimeLocked,

    /**
如果设备应在用户活动超时已过并且到了就寝时间时自动小睡并开始做梦,则返回 true
     */
    @GuardedBy("mLock")
    private boolean shouldNapAtBedTimeLocked() {
        return mDreamsActivateOnSleepSetting
                || (mDreamsActivateOnDockSetting
                        && mDockState != Intent.EXTRA_DOCK_STATE_UNDOCKED);
    }

进一步梳理其调用关系可知,关键变量为config_dreamsActivatedOnSleepByDefault,将设置为true即可,保证定时启动屏保。

这里的做法是在方案配置目录中将该值设置为true,如下所示:

config.xml文件中
    <bool name="config_dreamsActivatedOnSleepByDefault">true</bool>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值