`
isiqi
  • 浏览: 16499412 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

android的PowerManager和PowerManager.WakeLock and WiFi Lock

阅读更多

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.
  PowerManager.WakeLock :lets you say that you need to have the device on.
  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的操作步骤
  1.   PowerManagerpm=(PowerManager)getSystemService(Context.POWER_SERVICE);通过Context.getSystemService() .方法获取PowerManager实例。
  2.   然后通过PowerManager的newWakeLock ((int flags,String tag)来生成WakeLock实例。int Flags指示要获取哪种WakeLock,不同的Lock对cpu 、屏幕、键盘灯有不同影响。
  3.   获取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应用的。

分享到:
评论

相关推荐

    Unity调用Android系统PowerManager类功能.zip

    - 唤醒锁(WakeLock):`PowerManager.WakeLock`接口提供了控制设备保持唤醒的能力。开发者可以创建不同类型的唤醒锁,如PARTIAL_WAKE_LOCK(允许CPU运行但不亮屏)或FULL_WAKE_LOCK(CPU运行并亮屏)。创建唤醒锁...

    Android powermanger wakelock

    PowerManager.WakeLock 有加锁和解锁两种状态,加锁的方式有两种: 第一种是永久的锁住,这样的锁除非显式的放开,否则是不会解锁的,所以这种锁用起来要非常的小心。 第二种锁是超时锁,这种锁会在锁住后一段时间...

    浅析Wakelock机制与Android电源管理

    在Android系统中,Wakelock机制是通过PowerManager来实现的。PowerManager是Android系统中的一个核心组件,负责管理Android设备的电源状态。PowerManager可以根据不同的电源状态来管理设备的电源,例如睡眠、休眠、...

    Android中如何禁止屏幕休眠和锁屏

    禁止屏幕休眠和锁屏可以使用三种方法:使用 WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON、使用 PowerManager.WakeLock 和禁用系统的锁频功能。每种方法都有其优缺,需要根据实际情况选择合适的方法。

    安卓Android源码——一键锁屏功能源码.zip

    在`LockScreenActivity`中,我们可能会看到类似以下的代码用于获取`PowerManager`和创建`WakeLock`: ```java PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE); WakeLock ...

    Android亮屏和熄屏控制实例详解

    总的来说,Android的`PowerManager`和`WakeLock`机制为开发者提供了精细的屏幕控制,允许根据应用需求定制屏幕的状态。理解并正确使用这些工具,对于创建高效、用户体验良好的Android应用至关重要。在实际开发过程中...

    Android锁屏无法继续定位问题

    private PowerManager.WakeLock wakeLock; @Override public void onCreate() { super.onCreate(); //创建PowerManager对象 pm = (PowerManager) getSystemService(Context.POWER_SERVICE); //保持cpu一直...

    android休眠与唤醒机制.zip

    - Android提供了PowerManager类,通过其createWakeLock()方法创建Wakelock实例,然后调用acquire()和release()方法来获取和释放锁。 4. 远程唤醒安卓: - 远程唤醒是指通过网络信号,如GSM、WiFi或蓝牙,来唤醒...

    二年第一本书做的PowerManager练习

    然后在代码中,可以这样初始化`PowerManager`和获取`WakeLock`: ```java PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE); WakeLock wakeLock = powerManager.newWakeLock...

    Android应用程序保持后台唤醒(使用WakeLock实现)

    `WakeLock`是Android中的`PowerManager`类的一个功能,它允许开发者控制设备的电源状态,防止设备因节省电力而进入休眠。`WakeLock`的使用确保了特定任务或服务能够在后台持续运行,即使屏幕已关闭。在官方文档中,`...

    android 通过Power事件实现休眠和唤醒

    总结,通过监听Power事件并利用WakeLock和KeyguardLock,我们可以有效地控制Android设备的休眠和唤醒。然而,这种操作需要谨慎,因为它直接影响到用户的使用体验和电池寿命。在实际应用中,开发者应遵循最佳实践,...

    android中的屏幕唤醒

    可以通过`PowerManager`实例创建一个`WakeLock`对象,并设置其类型和标志。 ```java PowerManager.WakeLock wl; wl = pm.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.SCREEN_BRIGHT_WAKE_LOCK, ...

    Android一键锁屏功能源码.zip

    这段代码中,我们首先通过`PowerManager`获取一个`WakeLock`对象,确保在锁屏时设备保持唤醒状态。然后,我们使用`KeyguardManager`来请求解除锁屏。`SCREEN_BRIGHT_WAKE_LOCK`表示屏幕应保持亮起,`ON_AFTER_...

    android WakeLock使用方法代码实例

    PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "Android123"); ``` 这里,我们创建了一个名为 "Android123" 的 WakeLock 实例,使用 SCREEN_DIM_WAKE_LOCK 模式,这意味着屏幕将...

    Android应用源码之一键锁屏功能源码.zip

    PowerManager.WakeLock wakeLock = powerManager.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "LockScreenTag"); wakeLock.acquire(); KeyguardManager ...

    Android背光控制_2

    在Android开发中,`PowerManager`类是控制设备功耗的重要工具,而`WakeLock`则是`PowerManager`提供的用于防止系统进入休眠状态的对象。通过获取`PowerManager`实例并创建`WakeLock`对象,开发者能够确保设备在特定...

    Android监听屏幕是否锁屏

    总之,通过`PowerManager`的`WakeLock`和`BroadcastReceiver`,我们可以有效地监控Android设备的屏幕状态,从而在屏幕锁屏或解锁时执行相应的操作。这个功能对于实现特定功能的应用来说是至关重要的,比如提高用户...

    android一键锁屏源代码,android4.2工作正常

    PowerManager.WakeLock wakeLock = powerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK, "MyWakeLock"); wakeLock.acquire(); ``` 在完成锁屏操作后,别忘了释放这些锁: ```java lock.reenableKeyguard(); wake...

Global site tag (gtag.js) - Google Analytics