4

Android 保持屏幕常亮的几种方法

 2 years ago
source link: http://www.androidchina.net/7032.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

版权声明:

本账号发布文章均来自公众号,承香墨影(cxmyDev),版权归承香墨影所有。

未经允许,不得转载。

在实际开发的过程中,会有一些需要保持屏幕常亮,避免进入锁屏状态的需求。最常见的就是视频播放的过程中,如果屏幕突然暗了,或者直接锁屏,会非常的影响用户的体验。

本篇文章就对 Android 下,如何保持屏幕常量,做一个简单的记录和总结。

二、几种常见的方法

1、WakeLock

使用 WakeLock 是一种教科书式的比较常规的手段,使用起来也非常的简单。

可以看到,WakeLock 主要是通过 PowerManager 获取,然后通过 acquire() 方法获取一个 WakeLock 资源,WakeLock 也是一种资源,在使用完成之后,别忘了调用 release()方法进行释放。

使用 WakeLock 还需要额外的声明 WAKE_LOCK 权限。

<uses-permission android:name="android.permission.WAKE_LOCK" />

当然,使用 WakeLock 暂时来看,应该还是没有什么问题的。但是实际上,所有和屏幕亮度相关的 WakeLock 的 Flag ,在 API level 17+ 之上,都已经被标记废弃了。可以看出 Android 在节能上做了很多努力,屏幕是费电大户,既然已经被废弃掉了,正常来说,我们还是不推荐使用的。

更多和 PowerManager.WakeLock 相关的内容,可以看看之前的一篇文章《PowerManager 不是只有 WakeLock 》。

2、FLAG_KEEP_SCREEN_ON

前面说了,WakeLock 已经被标记废弃。虽然被废弃了,但是实际上 Android 还是给我们提供了对应的解决方案的,那就是使用 FLAG_KEEP_SCREEN_ON 的方式来标记屏幕常亮。

FLAG_KEEP_SCREEN_ON 使用起来也非常的简单,它是一个页面 Window 上的一个 Flag ,使用 addFlags() 方法添加。

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

当然,这里使用完成之后,也是需要取消掉的。取消这个 Flag 使用 clearFlags() 方法来取消。

getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

通常我们会在一个 Activity 的 onResume() 和 onPause() 方法中,分别调用这两个方法。

看看 FLAG_KEEP_SCREEN_ON 的文档解释。

从这里可以看出来,它只作用在一个被显示的 Window 上,并且保持设备屏幕高亮度的常亮。

其实这里也可以看出来,官方废弃 WakeLock 而推荐使用 FLAG_KEEP_SCREEN_ON ,一部分原因在于 WakeLock 是一个全局的资源,而 FLAG_KEEP_SCREEN_ON 只是一个和 window 相关的资源,作用范围更小了一些。并且它比 WakeLock 更好的一点在于,它不需要额外的申请权限,一般来说,我们还是推荐使用它的。

3、keepScreenOn

除了给 Window 添加一个 FLAG_KEEP_SCREEN_ON 的 Flag 之外,还可以对当前可见的 View 调用 keepScreenOn() 方法来设置屏幕常亮。

keepScreenOn() 是 View 对象上的方法,同时也提供了布局中的属性 android:keepScreenOn 来方便我们在布局中对其进行设置。

需要注意的一点,使用 keepScreenOn() 设置的常亮标识,需要当前 View 保持屏幕可见才行。所以一般而言,我们会在页面的根布局中,添加此属性。

通过文档可以看到,实际上它的原理和 FLAG_KEEP_SCREEN_ON 一样的,只是它更简单,只需要对某个 View 设置,如果该 View 可见即生效,否者就不生效。

4、MediaPlayer的 setScreenOnWhilePlaying()

如果我们是使用一个 MediaPlayer 来进行视频播放的话,MediaPlayer 还提供了 setScreenOnWhilePlaying() 方法,来设置屏幕常量。

其实没什么好说的,继续查看源码可以看到其实最终调用的还是 keepScreenOn() 方法。当然多了解一种方法也没有什么坏处。

保持屏幕常亮的方式有很多,选用我们需要的即可。当然,最好还是不要使用 WakeLock 了,比较已经被标记为废弃了。

转载请注明:Android开发中文站 » Android 保持屏幕常亮的几种方法


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK