今天有人问我,怎么实现锁屏也能监听音量键。我就和他说,把你要做的事情抽取出来放到service后台里,然后再设置service为保持唤醒。但是看到他还是比较迷惘,而且保持唤醒属于电源管理这块,可能也有些朋友不是很懂,这里我稍稍讲解一下。
一般情况下手机锁屏后,Android系统为了省电以及减少CPU消耗,在一段时间后会使系统进入休眠状态,这时,Android系统中CPU会保持在一个相对较低的功耗状态。这样子就会使得应用程序很多操作,例如轮询,在锁屏后就无法工作了。这时候我们就要使用android的wakelock机制了。
<uses-permission android:name="android.permission.DEVICE_POWER"/>
WakeLock wakeLock = null;
private void acquire()
{
if (null == wakeLock)
{
PowerManager pm = (PowerManager)this.getSystemService(Context.POWER_SERVICE);
wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK|PowerManager.ON_AFTER_RELEASE, "MyService");
if (null != wakeLock)
{
wakeLock.acquire();
}
}
}
private void release()
{
if (null != wakeLock)
{
wakeLock.release();
wakeLock = null;
}
}
wakeLock作为电源管理powerManager的一部分,我们先看看官方的说明:
PowerManager:This class gives you control of the power state of the device.
PowerManager.WakeLock: lets you say that you need to have the device on.
我们使用wakeLock时需取得powermanager的对象,然后再去取得wakelock对象,其中newWakeLock()方法有两个参数,第二个是字符串,是你要使用WakeLock的service或其他的名称。第一个参数是锁的类型,不同的类型的WakeLock实现的效果也不一样:
PARTIAL_WAKE_LOCK:保持CPU 运转,屏幕和键盘灯有可能是关闭的。
SCREEN_DIM_WAKE_LOCK:保持CPU 运转,允许保持屏幕显示但有可能是灰的,允许关闭键盘灯
SCREEN_BRIGHT_WAKE_LOCK:保持CPU 运转,允许保持屏幕高亮显示,允许关闭键盘灯
FULL_WAKE_LOCK:保持CPU 运转,保持屏幕高亮显示,键盘灯也保持亮度
ACQUIRE_CAUSES_WAKEUP:强制使屏幕亮起,这种锁主要针对一些必须通知用户的操作.
ON_AFTER_RELEASE:当锁被释放时,保持屏幕亮起一段时间。
如此一来,我们的程序就能继续在锁屏下进行各种监听、轮询等等。
欢迎加关注联系,相互学习。
如有转载,请注明出处:http://blog.youkuaiyun.com/hjhrq1991