移动开发:Android4.0.4 屏幕熄屏后保持外接设备正常工作的方法
来源:互联网 发布:linux系统扫描工具 编辑:程序博客网 时间:2024/05/16 05:43
最近一个项目中需要实现屏幕熄屏后保持外接设备正常工作,经过一些列的调查,发现有下面2中方法可以实现,不敢独享,现公布于众。
方法一:在app中实现
代码如下:
import android.os.PowerManager;import android.os.PowerManager.WakeLock;private WakeLock wakeLock = null;private void acquireWakeLock() { if (wakeLock == null) { Log.d(TAG, "acquireWakeLock"); PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, this.getClass() .getCanonicalName()); wakeLock.acquire(); } } private void releaseWakeLock() {if (wakeLock != null && wakeLock.isHeld()) {Log.d(TAG, "releaseWakeLock");wakeLock.release();wakeLock = null;}}
添加权限
<uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.DEVICE_POWER" />
最后,别忘了加系统签名。
方法二:驱动中实现
驱动程序的API
驱动程序可以通过添加wakelock变量的状态,并调用wake_lock_init如下面的片段所示,使用wakelock的API:
struct state {
struct wakelock wakelock;
}
init() {
wake_lock_init(&state->wakelock, WAKE_LOCK_SUSPEND, "wakelockname");
}
Before freeing the memory, wake_lock_destroy must be called:
uninit() {
wake_lock_destroy(&state->wakelock);
}
当驱动程序确定它需要运行(通常在一个中断处理程序),它调用wake_lock:
wake_lock(&state->wakelock);
当它不再需要运行,它调用wake_unlock:
wake_unlock(&state->wakelock);
它也可以调用wake_lock_timeout拖延后释放wakelock:
wake_lock_timeout(&state->wakelock, HZ);
在Android应用开发中,不少的应用需要和屏幕打交道,例如闹钟响铃的时候要保持屏幕处于亮屏状态,而在提醒过后又需要将屏幕熄灭。那么,在Android中是怎样来控制亮屏和熄屏的呢?下面就揭开神秘的面纱。
一、PowerManager和PowerManager.WakeLock
从标题中就可以大概看出这两者的关系,它们的静态结构如下:
下面分别说一下它们的作用:
1、PowerManager
PowerManager是一个系统服务类,它是用来控制设备的电源的状态,例如,goToSleep就可以使设备进入睡眠状态,setBacklightBrightness可以用来控制背光的亮度。
PowerManager作为一个系统的服务,在整个系统中只有一个实例,所以可以使用Context.getSystemService()来获取:
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
分析到这里,可以更进一步的看出两者之间的关系,PowerManager是系统级别的管理者,每一个Application需要使用WakeLock都需要通过它来分配。
pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG);
上面的代码就是用来创建一个WakeLock的方法,其中,PowerManager.PARTIIAL_WAKE_LOCK是一个标志位,标志位是用来控制获取的WakeLock对象的类型,主要涉及到CPU、屏幕和键盘灯,下面说一下标志位的意义。
表一
Flag ValueCPUScreenKeyboardPARTIAL_WAKE_LOCKOn*OffOffSCREEN_DIM_WAKE_LOCKOnDimOffSCREEN_BRIGHT_WAKE_LOCKOnBrightOffFULL_WAKE_LOCKOnBrightBright2、PowerManager.WakeLock
该类可以用来控制设备的工作状态。使用该类中的acquire可以用来使设备一直处于工作的状态,当然如果你不需要使用该设备了,就调用release来关闭。注意:在使用该类的时候,必须保证acquire和release是成对出现的。
根据acquire的实现,可以知道有两种方式可以确保acquire和release成对出现:
(1)、自动release
public void acquire(long timeout) { synchronized (mToken) { acquireLocked(); mHandler.postDelayed(mReleaser, timeout); } }
调用该方法,就可以实现在timeout之后会自动调用release。
(2)、手动release
public void acquire() { synchronized (mToken) { acquireLocked(); }}
该函数不会自动release,就需要用户手动调用,所以使用的方式如下:
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "My Tag");wl.acquire(); ..screen will stay on during this section..wl.release();
- 移动开发:Android4.0.4 屏幕熄屏后保持外接设备正常工作的方法
- Android4.0.4 屏幕熄屏后保持外接设备正常工作的方法
- 保持iOS设备屏幕常亮的方法
- 保持iOS设备屏幕常亮的方法
- 保持iOS设备屏幕常亮的方法
- 保持iOS设备屏幕常亮的方法
- 保持iOS设备屏幕常亮的方法
- 保持iOS设备屏幕常亮的方法
- [绍棠] 保持iOS设备屏幕常亮的方法
- 保持iOS设备屏幕常亮的方法
- 保持iOS设备屏幕常亮的方法
- centos外接屏幕调节方法
- centos外接屏幕调节方法
- centos外接屏幕调节方法
- 移动设备,屏幕自适应问题解决方法
- Android检测外接USB设备的几种方法
- 保持屏幕长亮的方法
- android保持屏幕常量的方法
- ★php中session机制探究
- 缓存子系统如何设计
- Android Handler总结_java相关编程
- 从年到毫秒的时间格式
- 设计模式C++描述----16.状态(State)模式
- 移动开发:Android4.0.4 屏幕熄屏后保持外接设备正常工作的方法
- 快速幂取余
- 数字图像处理:2.线性对比度展宽
- 比特率和码率的关系
- hosts修改
- 数字图像处理:3.伪彩色处理
- CoreAnimation编程指南(六)动画
- 分割平面的几种方法
- UVa 10051 Tower of Cubes DP 简单动态规划题