2010年9月27日月曜日

Android PowerManager を使う

PowerManager

デバイスの電源状態をコントロールするためのクラス

このAPIを使うと、デバイスのバッテリーライフに重大な影響を及ぼす。
なので、本当に必要な時以外は WakeLocks を取得しないこと!
そして可能な限り最低レベルの使用にし、必要なくなったらすぐに開放する!

1. Context.getSystemService() でこのクラスのインスタンスを取得

2. newWakeLock() で PowerManager.WakeLock オブジェクトを生成する

3. このオブジェクトのメソッドを使って、デバイスの電源状態をコントロールする

こんな感じ

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 によって、システムの電源への影響度を変えられる。
これらは組み合わせられない。

Flag ValueCPUScreenKeyboard
PARTIAL_WAKE_LOCKOn*OffOff
SCREEN_DIM_WAKE_LOCKOnDimOff
SCREEN_BRIGHT_WAKE_LOCKOnBrightOff
FULL_WAKE_LOCKOnBrightBright


*PARTIAL_WAKE_LOCK を設定した場合、CPU はタイマーに関係なく、ユーザーが電源ボタンを押した後でも走り続ける。それ以外の wakelocks を選択した場合は、ユーザーは電源ボタンを使ってデバイスをスリープ状態にすることができる。

上記の flag に加えて、以下の2つの flags を組み合わせることができる。
これらは、スクリーンの挙動にのみ影響を与える。また、これらの flags は
PARTIAL_WAKE_LOCK と組み合わせても意味はない。


Flag ValueDescription
ACQUIRE_CAUSES_WAKEUP通常の wake locks なので、実際に照明をつけることはない。その代わり、ユーザーの動作などによって、一度照明がつくとそのままの状態を保つ。この flag は WakeLock が取得されたとき、スクリーンとキーボードがすぐに立ち上がるように強制する。典型的には、ユーザーにとってすぐに見れることが重要な notifications などに使う。
ON_AFTER_RELEASEこの flag をセットすると、WakeLock が開放されたときにユーザーの activity timer がリセットされる。これによって照明がすこしだけ長くついたままになる。もし wake lock 状態を循環しているなら、ちらつきを減らすために使うことができる。



 

0 件のコメント:

コメントを投稿