權限獲取
要進行電源的操作需要在AndroidManifest.xml中聲明該應用有設置電源管理的權限。
<uses-permission android:name="android.permission.WAKE_LOCK"/>
你可能還需要
<uses-permission android:name="android.permission.DEVICE_POWER"/>
你可能還需要
<uses-permission android:name="android.permission.DEVICE_POWER"/>
附上簡單的純粹用來屏幕喚醒的一段代碼來說明:
- package com.eyu.wake_lock;
- import android.app.Activity;
- import android.os.Bundle;
- import android.os.PowerManager;
- import android.os.PowerManager.WakeLock;
- public class Wake_lockActivity extends Activity {
- private boolean iswakeLock = true;// 是否常亮
- private WakeLock wakeLock;
- /** Called when the activity is first created. */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- }
- @Override
- protected void onResume() {
- // TODO Auto-generated method stub
- PowerManager pm = (PowerManager) getSystemService(POWER_SERVICE);
- wakeLock = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK
- | PowerManager.ON_AFTER_RELEASE, "DPA");
- if (iswakeLock) {
- wakeLock.acquire();
- }
- super.onResume();
- }
- @Override
- protected void onPause() {
- // TODO Auto-generated method stub
- super.onDestroy();
- if (wakeLock != null) {
- wakeLock.release();
- }
- android.os.Process.killProcess(android.os.Process.myPid());
- }
- }
通常在onRusume方法中將獲得到的鎖使用acquire()方法來保持喚醒,在onPause方法中使用release()方法來釋放掉該鎖,利用Activity的生命周期來巧妙的使這兩種方法成對的出現。
PowerManager和WakeLock的操作步驟
- PowerManager pm = (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:正常喚醒鎖實際上並不打開照明。相反,一旦打開他們會一直仍然保持(例如來世user的activity)。當獲得wakelock,這個標志會使屏幕或/和鍵盤立即打開。一個典型的使用就是可以立即看到那些對用戶重要的通知。
ON_AFTER_RELEASE:設置了這個標志,當wakelock釋放時用戶activity計時器會被重置,導致照明持續一段時間。如果你在wacklock條件中循環,這個可以用來減少閃爍