PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
mWakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,
"AAAAA");
mWakeLock.setReferenceCounted(true);
// Create a wifi lock
WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
mWifiLock = wifiManager.createWifiLock("CBSRadioPlayer");
mWifiLock.setReferenceCounted(true);
mWakeLock.acquire();
// Acquire wifi lock
mWifiLock.acquire();
是屏幕保持亮度且WiFi不关闭,当长时间不操作时,手机会进入休眠WiFi会关闭,如果有流媒体播放服务的话会
使用你的3G流量那会是很大的费用一笔!
PowerManager.WakeLock
PowerManager.WakerLock是我分析Standup Timer源代码时发现的一个小知识点,Standup
Timer 用WakeLock保证程序运行时保持手机屏幕的恒亮(程序虽小但也做得相当的细心,考虑的很周到)。PowerManager
和PowerManager.WakerLock7用于对Android设备的电源进行管理。
PowerManager
:This class gives you control of the power state of the device.
Android中通过各种Lock锁对电源进行控制,需要注意的是加锁和解锁必须成对出现。先上一段Standup Timer里的代码然后进行说明。
代码
private
void
acquireWakeLock() {
if
(wakeLock
==
null
) {
Logger.d(
"
Acquiring wake lock
"
);
PowerManager pm
=
(PowerManager) getSystemService(Context.POWER_SERVICE);
wakeLock
=
pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK,
this
.getClass().getCanonicalName());
wakeLock.acquire();
}
}
private
void
releaseWakeLock() {
if
(wakeLock
!=
null
&&
wakeLock.isHeld()) {
wakeLock.release();
wakeLock
=
null
;
}
}
acquireWakeLock()方法中获取了SCREEN_DIM_WAKE_LOCK锁,该锁使 CPU
保持运转,屏幕保持亮度(可以变灰)。这个函数在Activity的
onResume中被调用。releaseWakeLock()方法则是释放该锁。它在Activity的
onPause中被调用。利用Activiy的生命周期,巧妙的让acquire()和release()成对出现。
@Override
protected
void
onResume()
{
super
.onResume();
//
获取锁,保持屏幕亮度
acquireWakeLock();
startTimer();
}
代码
PowerManager和WakeLock的操作步骤
- PowerManagerpm=(PowerManager)getSystemService(Context.POWER_SERVICE);通过
Context.getSystemService()
.方法获取PowerManager实例。
- 然后通过PowerManager的newWakeLock
((int flags,String
tag)来生成WakeLock实例。int Flags指示要获取哪种WakeLock,不同的Lock对cpu 、屏幕、键盘灯有不同影响。
-
获取WakeLock实例后通过acquire()获取相应的锁,然后进行其他业务逻辑的操作,最后使用release()释放(释放是必须的)。
关于int flags
各种锁的类型对CPU 、屏幕、键盘的影响:
PARTIAL_WAKE_LOCK
:保持CPU 运转,屏幕和键盘灯有可能是关闭的。
SCREEN_DIM_WAKE_LOCK
:保持CPU 运转,允许保持屏幕显示但有可能是灰的,允许关闭键盘灯
SCREEN_BRIGHT_WAKE_LOCK
:保持CPU 运转,允许保持屏幕高亮显示,允许关闭键盘灯
FULL_WAKE_LOCK
:保持CPU 运转,保持屏幕高亮显示,键盘灯也保持亮度
ACQUIRE_CAUSES_WAKEUP
:Normal
wake locks don't actually turn on the illumination. Instead, they cause
the illumination to remain on once it turns on (e.g. from user
activity). This flag will force the screen and/or keyboard to turn on
immediately, when the WakeLock is acquired. A typical use would be for
notifications which are important for the user to see immediately.
ON_AFTER_RELEASE
:f
this flag is set, the user activity timer will be reset when the
WakeLock is released, causing the illumination to remain on a bit
longer. This can be used to reduce flicker if you are cycling between
wake lock conditions.
权限获取
要进行电源的操作需要在AndroidManifest.xml中声明该应用有设置电源管理的权限。
<
uses-permission
android:name
="android.permission.WAKE_LOCK"
/>
你可能还需要
<
uses-permission
android:name
="android.permission.DEVICE_POWER"
/>
另外WakeLock的设置是 Activiy 级别的,不是针对整个Application应用的。
分享到:
相关推荐
- 唤醒锁(WakeLock):`PowerManager.WakeLock`接口提供了控制设备保持唤醒的能力。开发者可以创建不同类型的唤醒锁,如PARTIAL_WAKE_LOCK(允许CPU运行但不亮屏)或FULL_WAKE_LOCK(CPU运行并亮屏)。创建唤醒锁...
PowerManager.WakeLock 有加锁和解锁两种状态,加锁的方式有两种: 第一种是永久的锁住,这样的锁除非显式的放开,否则是不会解锁的,所以这种锁用起来要非常的小心。 第二种锁是超时锁,这种锁会在锁住后一段时间...
在Android系统中,Wakelock机制是通过PowerManager来实现的。PowerManager是Android系统中的一个核心组件,负责管理Android设备的电源状态。PowerManager可以根据不同的电源状态来管理设备的电源,例如睡眠、休眠、...
禁止屏幕休眠和锁屏可以使用三种方法:使用 WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON、使用 PowerManager.WakeLock 和禁用系统的锁频功能。每种方法都有其优缺,需要根据实际情况选择合适的方法。
在`LockScreenActivity`中,我们可能会看到类似以下的代码用于获取`PowerManager`和创建`WakeLock`: ```java PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE); WakeLock ...
总的来说,Android的`PowerManager`和`WakeLock`机制为开发者提供了精细的屏幕控制,允许根据应用需求定制屏幕的状态。理解并正确使用这些工具,对于创建高效、用户体验良好的Android应用至关重要。在实际开发过程中...
private PowerManager.WakeLock wakeLock; @Override public void onCreate() { super.onCreate(); //创建PowerManager对象 pm = (PowerManager) getSystemService(Context.POWER_SERVICE); //保持cpu一直...
- Android提供了PowerManager类,通过其createWakeLock()方法创建Wakelock实例,然后调用acquire()和release()方法来获取和释放锁。 4. 远程唤醒安卓: - 远程唤醒是指通过网络信号,如GSM、WiFi或蓝牙,来唤醒...
然后在代码中,可以这样初始化`PowerManager`和获取`WakeLock`: ```java PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE); WakeLock wakeLock = powerManager.newWakeLock...
`WakeLock`是Android中的`PowerManager`类的一个功能,它允许开发者控制设备的电源状态,防止设备因节省电力而进入休眠。`WakeLock`的使用确保了特定任务或服务能够在后台持续运行,即使屏幕已关闭。在官方文档中,`...
总结,通过监听Power事件并利用WakeLock和KeyguardLock,我们可以有效地控制Android设备的休眠和唤醒。然而,这种操作需要谨慎,因为它直接影响到用户的使用体验和电池寿命。在实际应用中,开发者应遵循最佳实践,...
可以通过`PowerManager`实例创建一个`WakeLock`对象,并设置其类型和标志。 ```java PowerManager.WakeLock wl; wl = pm.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.SCREEN_BRIGHT_WAKE_LOCK, ...
这段代码中,我们首先通过`PowerManager`获取一个`WakeLock`对象,确保在锁屏时设备保持唤醒状态。然后,我们使用`KeyguardManager`来请求解除锁屏。`SCREEN_BRIGHT_WAKE_LOCK`表示屏幕应保持亮起,`ON_AFTER_...
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "Android123"); ``` 这里,我们创建了一个名为 "Android123" 的 WakeLock 实例,使用 SCREEN_DIM_WAKE_LOCK 模式,这意味着屏幕将...
PowerManager.WakeLock wakeLock = powerManager.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "LockScreenTag"); wakeLock.acquire(); KeyguardManager ...
在Android开发中,`PowerManager`类是控制设备功耗的重要工具,而`WakeLock`则是`PowerManager`提供的用于防止系统进入休眠状态的对象。通过获取`PowerManager`实例并创建`WakeLock`对象,开发者能够确保设备在特定...
总之,通过`PowerManager`的`WakeLock`和`BroadcastReceiver`,我们可以有效地监控Android设备的屏幕状态,从而在屏幕锁屏或解锁时执行相应的操作。这个功能对于实现特定功能的应用来说是至关重要的,比如提高用户...
PowerManager.WakeLock wakeLock = powerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK, "MyWakeLock"); wakeLock.acquire(); ``` 在完成锁屏操作后,别忘了释放这些锁: ```java lock.reenableKeyguard(); wake...