如何让手机保持唤醒状态
2013-12-08 11:35
190 查看
手机的正常行为是闲置一段时间后屏幕变暗,然后熄灭,然后CPU关闭。
有些场景需要改变这种行为,例如播放视频时希望屏幕不要熄灭;
正在进行一些后台操作比如下载东西的时候希望CPU不要停止;
保持屏幕点亮:
在activity中执行如下code(不要在service或者其他组件调用)
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
这种做法不需要权限,一般你也无需clean这个flag,系统会管理一切。
或者在activity的layout中设置属性,这和上面的方法是一样的。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:keepScreenOn="true">
...
</RelativeLayout>
保持CPU打开
需要通过PowerManager拿到wake locks,这种方式一般不用再activity中,一般用在后台service中,用于在屏幕熄灭的时候让CPU继续开启。
首先需要声明权限<uses-permission android:name="android.permission.WAKE_LOCK" />
申请
PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);
Wakelock wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,
"MyWakelockTag");
wakeLock.acquire();
释放
wakeLock.release();
如果用法是你的broadcast receiver中启动一个service,这个service需要保持CPU开启,那么可以使用WakefulBroadcastReceiver。
WakefulBroadcastReceiver会创建和管理一个PARTIAL_WAKE_LOCK,它保证启动的service执行期间CPU是开启的。
(这儿提到了PARTIAL_WAKE_LOCK,一共有4种lock。)
public class MyWakefulReceiver extends WakefulBroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent) {
// Start the service, keeping the device awake while the service is
// launching. This is the Intent to deliver to the service.
Intent service = new Intent(context, MyIntentService.class);
startWakefulService(context, service); //用startWakefulService启动service
}
}
在service端执行完成后要call completeWakefulIntent释放wake lock
protected void onHandleIntent(Intent intent) {
Bundle extras = intent.getExtras();
// Do the work that requires your app to keep the CPU running.
// ...
// Release the wake lock provided by the WakefulBroadcastReceiver.
MyWakefulReceiver.completeWakefulIntent(intent); //这个intent和传入的intent是一摸一样的。
}
有些场景需要改变这种行为,例如播放视频时希望屏幕不要熄灭;
正在进行一些后台操作比如下载东西的时候希望CPU不要停止;
保持屏幕点亮:
在activity中执行如下code(不要在service或者其他组件调用)
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
这种做法不需要权限,一般你也无需clean这个flag,系统会管理一切。
或者在activity的layout中设置属性,这和上面的方法是一样的。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:keepScreenOn="true">
...
</RelativeLayout>
保持CPU打开
需要通过PowerManager拿到wake locks,这种方式一般不用再activity中,一般用在后台service中,用于在屏幕熄灭的时候让CPU继续开启。
首先需要声明权限<uses-permission android:name="android.permission.WAKE_LOCK" />
申请
PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);
Wakelock wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,
"MyWakelockTag");
wakeLock.acquire();
释放
wakeLock.release();
如果用法是你的broadcast receiver中启动一个service,这个service需要保持CPU开启,那么可以使用WakefulBroadcastReceiver。
WakefulBroadcastReceiver会创建和管理一个PARTIAL_WAKE_LOCK,它保证启动的service执行期间CPU是开启的。
(这儿提到了PARTIAL_WAKE_LOCK,一共有4种lock。)
Value | CPU | Screen | Keyboard |
PARTIAL_WAKE_LOCK | On | Off | Off |
SCREEN_DIM_WAKE_LOCK | On | Dim | Off |
SCREEN_BRIGHT_WAKE_LOCK | On | Bright | Off |
FULL_WAKE_LOCK | Ob | Bright | Bright |
{
@Override
public void onReceive(Context context, Intent intent) {
// Start the service, keeping the device awake while the service is
// launching. This is the Intent to deliver to the service.
Intent service = new Intent(context, MyIntentService.class);
startWakefulService(context, service); //用startWakefulService启动service
}
}
在service端执行完成后要call completeWakefulIntent释放wake lock
protected void onHandleIntent(Intent intent) {
Bundle extras = intent.getExtras();
// Do the work that requires your app to keep the CPU running.
// ...
// Release the wake lock provided by the WakefulBroadcastReceiver.
MyWakefulReceiver.completeWakefulIntent(intent); //这个intent和传入的intent是一摸一样的。
}
相关文章推荐
- linux pam(一)
- 数据降维
- oracle 动态拼接语句并返回查询结果集
- ios专题 - APP设计流程
- 中国海洋大学第四届朗讯杯高级组 I Cuckoo for Hashing
- jdk1.7下载安装,及环境变量的配置
- 软件开发、软件设计培训笔记
- activiti 源码笔记之startProcess
- 软件开发、软件设计培训笔记
- 如何定位Sharepoint网站集所在的w3wp进程
- Java 内存溢出(java.lang.OutOfMemoryError)问题总结
- 升级到XP系统以后网速变慢但驱动程序都安装正常
- 嵌入式学习之路(四)——使用vi编写c程序
- 黑马程序员_面向对象第6天
- 成功的真相——你不能完全复制一个人,但你可以成功
- css之三权分立模式
- python threading server
- [NOIp 1998 提高组]Probelm 2 连接多位数【2011百度实习生笔试题】
- linux下redis安装配置及redis常用命令
- linux:SUID、SGID详解