`
java-admin
  • 浏览: 1376477 次
  • 性别: Icon_minigender_1
  • 来自: 陕西.西安
社区版块
存档分类
最新评论

android的PowerManager和PowerManager.WakeLock

阅读更多

前言

  学习android一段时间了,为了进一步了解android的应用是如何设计开发的,决定详细研究几个开源的android应用。从一些开源应用中吸收点东西,一边进行量的积累,一边探索android的学习研究方向。这里我首先选择了jwood的 Standup Timer 项目。本文将把研究的内容笔记整理,建立一个索引列表。

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里的代码然后进行说明。
android的PowerManager和PowerManager.WakeLock - fanwei51880 - 点睛android的PowerManager和PowerManager.WakeLock - fanwei51880 - 点睛代码
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(); }
android的PowerManager和PowerManager.WakeLock - fanwei51880 - 点睛android的PowerManager和PowerManager.WakeLock - fanwei51880 - 点睛代码
protected void onPause() { super.onPause(); synchronized(this) { cancelTimer(); releaseWakeLock(); if (finished) { clearState(); } else { saveState(); } } }

 

PowerManager和WakeLock的操作步骤
  1.   PowerManager pm = (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应用的。

http://fanwei51880.blog.163.com/blog/static/324067402010108105416798/

 

分享到:
评论

相关推荐

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

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

    Android powermanger wakelock

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

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

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

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

    wakeLock.release(); keyguardLock.disableKeyguard(); } // 唤醒设备 private void wakeUp() { wakeLock.acquire(); keyguardLock.reenableKeyguard(); } ``` 4. **注册和注销BroadcastReceiver**: 在...

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

    wakeLock.acquire(); // 执行需要屏幕保持点亮的操作 // ... wakeLock.release(); ``` 在`acquire()`方法调用后,屏幕会保持点亮,直到调用`release()`方法。如果希望在一段时间后自动释放`WakeLock`,可以使用`...

    浅析Wakelock机制与Android电源管理

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

    Android一键锁屏功能源码.zip

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

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

    wakeLock.acquire(); // 执行锁屏操作,如调用KeyguardManager或Systemui的相关方法 // 在合适的时间释放WakeLock wakeLock.release(); ``` 此外,源码可能还包含了与UI交互相关的部分,比如创建一个自定义的布局...

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

    wakeLock.acquire(); KeyguardManager keyguardManager = (KeyguardManager) getSystemService(KEYGUARD_SERVICE); keyguardManager.requestDismissKeyguard(this, null); wakeLock.release(); ``` 这里,`...

    android休眠与唤醒机制.zip

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

    Android锁屏无法继续定位问题

    wakeLock.acquire(); } @Override public void onDestroy() { wakeLock.release(); super.onDestroy(); } 这个写法我表示并没有什么用,并不能强制cpu持续运行。 (2)WakefulBroadcastReceiver public ...

    二年第一本书做的PowerManager练习

    wakeLock.acquire(); // 执行关键操作 wakeLock.release(); ``` 释放唤醒锁是非常重要的,因为忘记释放可能会导致设备电池过快消耗。在适当的时间调用`release()`方法以确保设备可以在完成后正常进入休眠状态。 ...

    Android2.3睡眠唤醒机制.doc

    Android引入了独特的唤醒机制,包括Wake_Lock唤醒锁、Early_Suspend预挂起和Late_Resume迟唤醒,以解决这个问题。当应用程序启动时,它可以申请一个Wake_Lock,这会在内核中注册并阻止系统进入休眠。一旦应用程序...

    android中的屏幕唤醒

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

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

    wakeLock.acquire(); ``` 在完成锁屏操作后,别忘了释放这些锁: ```java lock.reenableKeyguard(); wakeLock.release(); ``` 此外,为了使一键锁屏功能可以在任何界面下触发,通常会将其绑定到一个全局的广播接收器...

    Android背光控制_2

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

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

    wakeLock.acquire(); } } } private void releaseWakeLock() { if (wakeLock != null) { wakeLock.release(); wakeLock = null; } } ``` 在使用`WakeLock`时,别忘了在AndroidManifest.xml中声明必要的权限...

    Android监听屏幕是否锁屏

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

    android 实现拨打电话黑屏功能

    // 例如,再次调用 wakeLock.acquire() 以延长唤醒锁的持续时间 } }, 500); // 延迟时间可以根据实际需求调整 ``` 此外,考虑到用户可能需要在黑屏状态下接听电话,你可能还需要处理来电接听和挂断的逻辑,这可能...

    Android中唤醒屏幕

    wakeLock.acquire(); ``` 这将使设备的屏幕点亮,CPU保持运行,直到释放唤醒锁。 五、释放唤醒锁 当操作完成后,记得释放唤醒锁,避免电池消耗过大: ```java // 释放唤醒锁 try { wakeLock.release(); } catch ...

Global site tag (gtag.js) - Google Analytics