public final class PowerManager
extends Object
java.lang.Object | |
↳ | android.os.PowerManager |
该类可让您控制设备的电源状态。
设备电池寿命将受到使用此API的显着影响。 除非你真的需要它们,否则不要购买PowerManager.WakeLock
,尽可能使用最低水平,并尽可能快地释放它们。
你可以通过调用 Context.getSystemService()
来获得这个类的一个实例。
您将使用的主要API是newWakeLock()
。 这将创建一个PowerManager.WakeLock
对象。 然后,您可以使用唤醒锁对象上的方法来控制设备的电源状态。
在实践中它很简单:
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();
定义了以下唤醒锁定级别,对系统功率有不同的影响。 这些级别是相互排斥的 - 你只能指定其中的一个。
Flag 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 |
On | Bright | Bright |
* 如果您保持部分唤醒锁定,无论显示超时或屏幕状态,甚至用户按下电源按钮后,CPU都将继续运行。 在所有其他唤醒锁中,CPU将运行,但用户仍然可以使用电源按钮使设备进入睡眠状态。
另外,您可以添加两个更多的标志,这些标志只影响屏幕的行为。 与PARTIAL_WAKE_LOCK
结合使用时,这些标志PARTIAL_WAKE_LOCK
。
Flag Value | 描述 |
---|---|
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 |
If 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. |
任何使用WakeLock的应用程序都必须请求应用程序清单的 <uses-permission>
元素中的 android.permission.WAKE_LOCK
权限。
Nested classes |
|
---|---|
class |
PowerManager.WakeLock 唤醒锁是一种机制,用于指示您的应用程序需要使设备保持开启状态。 |
Constants |
|
---|---|
int |
ACQUIRE_CAUSES_WAKEUP 唤醒锁定标志:获取唤醒锁定时打开屏幕。 |
String |
ACTION_DEVICE_IDLE_MODE_CHANGED 当 |
String |
ACTION_POWER_SAVE_MODE_CHANGED 在 |
int |
FULL_WAKE_LOCK 此常数在API级别17中已弃用。大多数应用程序应使用 |
int |
ON_AFTER_RELEASE 唤醒锁定标志:释放此唤醒锁定时,戳动用户活动计时器,使屏幕保持点亮状态。 |
int |
PARTIAL_WAKE_LOCK 唤醒锁定级别:确保CPU正在运行; 屏幕和键盘背光将被允许熄灭。 |
int |
PROXIMITY_SCREEN_OFF_WAKE_LOCK 唤醒锁定电平:当接近传感器激活时关闭屏幕。 |
int |
RELEASE_FLAG_WAIT_FOR_NO_PROXIMITY 标记为 |
int |
SCREEN_BRIGHT_WAKE_LOCK 此常量在API级别13中已弃用。大多数应用程序应使用 |
int |
SCREEN_DIM_WAKE_LOCK 此常数在API级别17中已弃用。大多数应用程序应使用 |
Public methods |
|
---|---|
boolean |
isDeviceIdleMode() 如果设备当前处于空闲模式,则返回true。 |
boolean |
isIgnoringBatteryOptimizations(String packageName) 返回给定的应用程序包名称是否在设备的电源白名单上。 |
boolean |
isInteractive() 如果设备处于交互式状态,则返回true。 |
boolean |
isPowerSaveMode() 如果设备当前处于省电模式,则返回true。 |
boolean |
isScreenOn() 此方法在API级别20中已弃用。请改用 |
boolean |
isSustainedPerformanceModeSupported() 该功能检查设备是否实施了持续性能模式。 |
boolean |
isWakeLockLevelSupported(int level) 如果支持指定的唤醒锁定级别,则返回true。 |
PowerManager.WakeLock |
newWakeLock(int levelAndFlags, String tag) 用指定的级别和标志创建一个新的唤醒锁。 |
void |
reboot(String reason) 重新启动设备。 |
Inherited methods |
|
---|---|
From class java.lang.Object
|
int ACQUIRE_CAUSES_WAKEUP
唤醒锁定标志:获取唤醒锁定时打开屏幕。
通常情况下,唤醒锁实际上不会唤醒设备,它们只会导致屏幕一旦打开就保持打开状态。 将视频播放器应用程序视为正常行为。 弹出并希望设备处于打开状态的通知是例外; 使用这个标志就像他们一样。
不能与 PARTIAL_WAKE_LOCK
一起使用。
常量值:268435456(0x10000000)
String ACTION_DEVICE_IDLE_MODE_CHANGED
当isDeviceIdleMode()
的状态改变时广播的意图。 这个广播只发送给已注册的接收者。
常量值:“android.os.action.DEVICE_IDLE_MODE_CHANGED”
String ACTION_POWER_SAVE_MODE_CHANGED
当isPowerSaveMode()
的状态改变时广播的意图。 这个广播只发送给已注册的接收者。
常量值:“android.os.action.POWER_SAVE_MODE_CHANGED”
int FULL_WAKE_LOCK
此常数在API级别17中已弃用。
大多数应用程序应该使用FLAG_KEEP_SCREEN_ON
而不是这种类型的唤醒锁,因为当用户在应用程序之间移动时,它将被平台正确管理,并且不需要特殊许可。
唤醒锁定等级:确保屏幕和键盘背光完全亮起。
如果用户按下电源按钮,则FULL_WAKE_LOCK
将隐式释放FULL_WAKE_LOCK
,导致屏幕和CPU都被关闭。 与PARTIAL_WAKE_LOCK
对比。
常量值:26(0x0000001a)
int ON_AFTER_RELEASE
唤醒锁定标志:释放此唤醒锁定时,戳动用户活动计时器,使屏幕保持点亮状态。
如果尚未打开,则不会打开屏幕。 如果您需要,请参阅ACQUIRE_CAUSES_WAKEUP
。
不能与 PARTIAL_WAKE_LOCK
一起使用。
常量值:536870912(0x20000000)
int PARTIAL_WAKE_LOCK
唤醒锁定级别:确保CPU正在运行; 屏幕和键盘背光将被允许熄灭。
如果用户按下电源按钮,则屏幕将被关闭,但CPU将保持打开状态,直到所有部分唤醒锁已释放。
常数值:1(0x00000001)
int PROXIMITY_SCREEN_OFF_WAKE_LOCK
唤醒锁定电平:当接近传感器激活时关闭屏幕。
如果接近传感器检测到物体在附近,则屏幕立即关闭。 物体移开后不久,屏幕再次打开。
近程唤醒锁不会防止设备入睡不像FULL_WAKE_LOCK
, SCREEN_BRIGHT_WAKE_LOCK
和SCREEN_DIM_WAKE_LOCK
。 如果没有用户活动并且没有其他唤醒锁被保持,则该设备将像往常一样睡着(并锁定)。 但是,当屏幕被接近传感器关闭时,设备不会入睡,因为它实际上被视为正在进行的用户活动。
由于并非所有设备都有接近传感器,因此请使用 isWakeLockLevelSupported(int)
来确定是否支持此唤醒锁定级别。
不能与 ACQUIRE_CAUSES_WAKEUP
一起使用。
常量值:32(0x00000020)
int RELEASE_FLAG_WAIT_FOR_NO_PROXIMITY
标记为 WakeLock.release(int)
:推迟释放 PROXIMITY_SCREEN_OFF_WAKE_LOCK
唤醒锁,直到接近传感器指示物体不是非常接近。
常数值:1(0x00000001)
int SCREEN_BRIGHT_WAKE_LOCK
此常数在API级别13中已弃用。
大多数应用程序应该使用FLAG_KEEP_SCREEN_ON
而不是这种类型的唤醒锁,因为它将由平台正确管理,因为用户在应用程序之间移动并且不需要特殊许可。
唤醒锁定等级:确保屏幕全亮; 键盘背光将被允许熄灭。
If the user presses the power button, then the SCREEN_BRIGHT_WAKE_LOCK
will be implicitly released by the system, causing both the screen and the CPU to be turned off. Contrast with PARTIAL_WAKE_LOCK
.
常量值:10(0x0000000a)
int SCREEN_DIM_WAKE_LOCK
此常数在API级别17中已弃用。
大多数应用程序应该使用FLAG_KEEP_SCREEN_ON
而不是这种类型的唤醒锁,因为当用户在应用程序之间移动时,它将被平台正确管理,并且不需要特殊许可。
唤醒锁定级别:确保屏幕开启(但可能变暗); 键盘背光将被允许熄灭。
如果用户按下电源按钮,则SCREEN_DIM_WAKE_LOCK
将隐式释放SCREEN_DIM_WAKE_LOCK
,导致屏幕和CPU都被关闭。 与PARTIAL_WAKE_LOCK
对比。
常数值:6(0x00000006)
boolean isDeviceIdleMode ()
如果设备当前处于空闲模式,则返回true。 这种情况发生在设备未使用并且没有长时间不动的情况下,因此它决定进入低功耗状态。 这可能涉及诸如关闭网络应用程序访问权限等内容。 您可以使用ACTION_DEVICE_IDLE_MODE_CHANGED
来监视对此状态的ACTION_DEVICE_IDLE_MODE_CHANGED
。
Returns | |
---|---|
boolean |
Returns true if currently in active device idle mode, else false. This is when idle mode restrictions are being actively applied; it will return false if the device is in a long-term idle mode but currently running a maintenance window where restrictions have been lifted. |
boolean isIgnoringBatteryOptimizations (String packageName)
返回给定的应用程序包名称是否在设备的电源白名单上。 可以通过ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS
调用的设置UI将应用放置在白名单中。
Parameters | |
---|---|
packageName |
String
|
Returns | |
---|---|
boolean |
boolean isInteractive ()
如果设备处于交互式状态,则返回true。
当此方法返回true时,设备处于唤醒状态并准备好与用户进行交互(尽管这不能保证用户只是在此刻与设备进行交互)。 主屏幕通常处于此状态。 某些功能(如接近传感器)可能会暂时关闭屏幕,同时仍使设备保持交互状态。 特别要注意的是,设备在梦中仍然被认为是互动的(因为梦可以是互动的),但是当它打瞌睡或睡着时不会。
当此方法返回false时,设备打瞌睡或睡着,必须先唤醒才能准备好再次与用户进行交互。 在此状态下,主屏幕通常会关闭。 某些功能(如“环境模式”)可能会导致主屏幕保持打开(尽管处于低功耗状态),以在设备打盹时显示系统提供的内容。
只要设备的交互状态发生变化,系统就会发送screen on
或screen off
广播。 由于历史原因,这些广播的名称是指屏幕的电源状态,但实际上它们是响应设备整体交互状态的变化而发送的,如本方法所述。
由于用户不在场,因此服务可以使用非交互式状态作为提示以节省电力。
Returns | |
---|---|
boolean |
True if the device is in an interactive state. |
boolean isPowerSaveMode ()
如果设备当前处于省电模式,则返回true。 处于此模式时,应用程序应尽可能减少其功能以节省电池电量。 您可以使用ACTION_POWER_SAVE_MODE_CHANGED
监视此状态的ACTION_POWER_SAVE_MODE_CHANGED
。
Returns | |
---|---|
boolean |
Returns true if currently in low power mode, else false. |
boolean isScreenOn ()
此方法在API级别20中已被弃用。
改为使用isInteractive()
。
如果设备处于交互式状态,则返回true。
由于历史原因,此方法的名称是指屏幕的电源状态,但它实际上描述了设备的整体交互状态。 此方法已由isInteractive()
取代。
此方法返回的值仅指示设备是否处于交互状态,与屏幕打开或关闭无关。 要确定屏幕的实际状态,请使用getState()
。
Returns | |
---|---|
boolean |
True if the device is in an interactive state. |
boolean isSustainedPerformanceModeSupported ()
该功能检查设备是否实施了持续性能模式。 这只需要检查一次,并且对于特定的设备/版本是恒定的。 持续性能模式旨在为持续时间提供一致的性能水平。 在使用setSustainedPerformanceMode(boolean)
之前,应用程序应检查设备是否支持此模式。
Returns | |
---|---|
boolean |
Returns True if the device supports it, false otherwise. |
boolean isWakeLockLevelSupported (int level)
如果支持指定的唤醒锁定级别,则返回true。
Parameters | |
---|---|
level |
int : The wake lock level to check. |
Returns | |
---|---|
boolean |
True if the specified wake lock level is supported. |
PowerManager.WakeLock newWakeLock (int levelAndFlags, String tag)
用指定的级别和标志创建一个新的唤醒锁。
levelAndFlags
参数指定唤醒锁定级别和使用逻辑OR运算符组合的可选标志。
唤醒锁级别为: PARTIAL_WAKE_LOCK
, FULL_WAKE_LOCK
, SCREEN_DIM_WAKE_LOCK
和SCREEN_BRIGHT_WAKE_LOCK
。 必须将一个唤醒锁定级别指定为levelAndFlags
参数的一部分。
唤醒锁标志是: ACQUIRE_CAUSES_WAKEUP
和ON_AFTER_RELEASE
。 可以将多个标志组合为levelAndFlags
参数的一部分。
呼叫 acquire()
收购之后锁定的对象,并 release()
当您完成。
PowerManager pm = (PowerManager)mContext.getSystemService( Context.POWER_SERVICE); PowerManager.WakeLock wl = pm.newWakeLock( PowerManager.SCREEN_DIM_WAKE_LOCK | PowerManager.ON_AFTER_RELEASE, TAG); wl.acquire(); // ... do work... wl.release();
虽然可以在没有特殊权限的情况下创建唤醒锁,但需要 WAKE_LOCK
权限才能实际获取或释放返回的唤醒锁。
如果使用它来保持屏幕FLAG_KEEP_SCREEN_ON
,则应该强烈考虑使用FLAG_KEEP_SCREEN_ON
。 当用户在应用程序之间移动时,此窗口标志将由平台正确管理,并且不需要特殊许可。
Parameters | |
---|---|
levelAndFlags |
int : Combination of wake lock level and flag values defining the requested behavior of the WakeLock. |
tag |
String : Your class name (or other tag) for debugging purposes. |
Returns | |
---|---|
PowerManager.WakeLock |
void reboot (String reason)
重新启动设备。 如果重新启动成功,则不会返回。
需要 REBOOT
权限。
Parameters | |
---|---|
reason |
String : code to pass to the kernel (e.g., "recovery") to request special boot modes, or null. |