Wakelock API详解

官方资料 

http://developer.android.com/intl/zh-CN/reference/android/os/PowerManager.WakeLock.html

http://developer.android.com/intl/zh-CN/reference/android/os/PowerManager.html

http://developer.android.com/intl/zh-CN/reference/android/view/WindowManager.LayoutParams.html#FLAG_KEEP_SCREEN_ON


示例

  1. PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);  
  2.  PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "My Tag");  
  3.  wl.acquire();  
  4.    ..screen will stay on during this section..  
  5.  wl.release();  

需要在AndroidManifest.xml中添加权限:

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


Tips

Dim:逐渐变暗

Bright:保持亮度


类型

ACQUIRE_CAUSES_WAKEUP
持锁后唤醒屏幕,其他的类型锁不会唤醒屏幕,而只是保持屏幕常亮,Dim 或 Bright。与PARTIAL_WAKE_LOCK互斥。
FULL_WAKE_LOCK
在Android4.2(API 17)后被废弃,建议采用 FLAG_KEEP_SCREEN_ON代替。

保持屏幕与键盘背光均为最大亮度,当Power键按下后,此锁会被系统释放。屏幕与CPU均关闭,与PARTIAL_WAKE_LOCK相反。

ON_AFTER_RELEASE
当此锁被释放时,将重置用户Activity计时器,能够让屏幕亮的更久些。但是当屏幕没有点亮时,不会唤醒屏幕,如果想这样,请使用ACQUIRE_CAUSES_WAKEUP。与PARTIAL_WAKE_LOCK互斥。
PARTIAL_WAKE_LOCK
持有此锁会使CPU处于运行状态,而屏幕和键盘背光将可以熄灭。如果Power键按下,屏幕会关闭,而CPU会被保持,直到此锁被释放。
SCREEN_BRIGHT_WAKE_LOCK
在Android3.2(API 13)后被废弃,使用 FLAG_KEEP_SCREEN_ON代替。

持锁将保持屏幕背光为最大亮度,而键盘背光可以熄灭。按下Power键后,此锁将会被系统自动释放,释放后屏幕与CPU均关闭。

SCREEN_DIM_WAKE_LOCK
在Android4.2(API 17)后被废弃,使用 FLAG_KEEP_SCREEN_ON代替。

持锁将保持屏幕背光常亮,但可以Dim,键盘背光可以熄灭。同样,在按下Power键后会被系统自动释放,CPU与屏幕均关闭。


使用方法
首先,使用PowerManager的newWakelock方法:

  1. PowerManager.WakeLock newWakeLock(int levelAndFlags, String tag)  

作用:新建一个名为tag的levelAndFlags类型的wakelock。

参数:

levelAndFlags:即为上边所介绍的类型;

tag:锁的名字,每个wakelock有唯一的名字。

  1. 例:  
  2. PowerManager pm = (PowerManager)mContext.getSystemService(  
  3.                                           Context.POWER_SERVICE);  
  4.  PowerManager.WakeLock wl = pm.newWakeLock(  
  5.                                       PowerManager.SCREEN_DIM_WAKE_LOCK  
  6.                                       | PowerManager.ON_AFTER_RELEASE,  
  7.                                       TAG);  

新建成功后,可以使用wakelock的API接口进行操作了。


接口操作

void acquire()    持锁;

void acquire(long timeout)    持锁,timeout毫秒后自动释放;

boolean isHeld()    返回锁的状态,true为正被持锁,false为被释放或未被持锁;

void release()    释放锁;

void setReferenceCounted(boolean value)    设置wakelock的计数机制,默认为计数。true为计数,false为不计数。

计数:每一个acquire必须对应一个release;

不计数:无论有多少个acquire,一个release就可以释放。

void setWorkSource(WorkSource ws)    设置工作域。可能有多个应用将会用到同一个wakelock,这个是用来确认这个wakelock是给哪个应用使用。如service;

String toString()    返回当前目标的一些描述。


关于FLAG_KEEP_SCREEN_ON

FLAG_KEEP_SCREEN_ON
当前窗口在显示给用户的时候,屏幕会保持常亮,Bright。

用法:

  1. Window w = activity.getWindow(); // in Activity's onCreate() for instance  
  2.  w.setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON,  
  3.          WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON  
  4. ); 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WakeLock API 是 Web API 的一部分,它允许 Web 应用程序请求设备保持唤醒状态,从而防止设备进入休眠状态。WakeLock API 可以用于很多场景,比如音乐播放器、视频播放器、导航应用、游戏等需要保持设备唤醒的应用程序。 以下是使用 WakeLock API 的一些基本步骤: 1. 检查浏览器是否支持 WakeLock API: ```javascript if ('wakeLock' in navigator) { // 支持 WakeLock API } else { // 不支持 WakeLock API } ``` 2. 请求 WakeLock: ```javascript navigator.wakeLock.request('screen') .then(function(wakeLock) { console.log('WakeLock 已经被获取'); // WakeLock 对象可以用于解除 WakeLock }) .catch(function(error) { console.error('获取 WakeLock 失败:', error); }); ``` 上面代码中,`request()` 方法返回一个 Promise 对象,如果获取 WakeLock 成功,Promise 对象的 `then()` 方法会被调用,传入一个 WakeLock 对象;如果获取 WakeLock 失败,Promise 对象的 `catch()` 方法会被调用,传入一个 Error 对象。 3. 解除 WakeLock: ```javascript wakeLock.release() .then(function() { console.log('WakeLock 已经被解除'); }) .catch(function(error) { console.error('解除 WakeLock 失败:', error); }); ``` 上面代码中,`release()` 方法返回一个 Promise 对象,如果解除 WakeLock 成功,Promise 对象的 `then()` 方法会被调用;如果解除 WakeLock 失败,Promise 对象的 `catch()` 方法会被调用,传入一个 Error 对象。 需要注意的是,WakeLock API 会消耗设备电量,应该在不需要保持唤醒状态时尽快解除 WakeLock。此外,不同类型的 WakeLock 有不同的限制和行为,需要根据具体情况选择合适的 WakeLock 类型。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值