2011-07-05 23 views
7

私はAndroid 3.0で作業しており、デバイスがスリープ状態になるか、画面が消えるときにアプリケーションで知る必要があります。Androidでスリープイベントに登録するには?

このインテント/イベントに登録することで、このような場合にいくつかのアクションを実行できますか?これを通知する何らかのアクションがBroadcastReceiverにありますか?

+1

@Yaniv:「私は、デバイスがスリープになったときに/画面をオフに自分のアプリケーションに知っておく必要がありますあなたの受信機は、あなただけの受信意思の理由を知るために、あなたの放送受信機での静的変数をチェックします。 " - なぜ? Androidアプリケーションの99.999%はこれを必要としません。これを行うための唯一の方法は、かなりユーザーに対して敵対的な行動(例えば、常に実行中のサービス)を想定しています。だから、あなたが達成しようとしていることを説明してください。より良い解決策を見つけることができます。 – CommonsWare

答えて

13

Thisページには、探しているもののチュートリアルがあります。

そのページからコピーしたコード(リンクのみからこれをオンにするために、直接役に立つものに答える):

1)意図を受け取るために、アプリケーション内のクラスを作成します。たとえば、次のレシーバーは単独でスタンドアロン変数をパート2で使用するように設定します。

2)画面のオン/オフイベントを受信するようにアクティビティを変更します。

public class ExampleActivity extends Activity { 
    @Override 
    protected void onCreate() { 
     // initialize receiver 
     IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON); 
     filter.addAction(Intent.ACTION_SCREEN_OFF); 
     BroadcastReceiver mReceiver = new ScreenReceiver(); 
     registerReceiver(mReceiver, filter); 
     // your code 
    } 

    @Override 
    protected void onPause() { 
     // when the screen is about to turn off 
     if (ScreenReceiver.wasScreenOn) { 
      // this is the case when onPause() is called by the system due to a screen state change 
      System.out.println("SCREEN TURNED OFF"); 
     } else { 
      // this is when onPause() is called when the screen state has not changed 
     } 
     super.onPause(); 
    } 

    @Override 
    protected void onResume() { 
     // only when screen turns on 
     if (!ScreenReceiver.wasScreenOn) { 
      // this is when onResume() is called due to a screen state change 
      System.out.println("SCREEN TURNED ON"); 
     } else { 
      // this is when onResume() is called when the screen state has not changed 
     } 
     super.onResume(); 
    } 
} 
+4

手動睡眠(ユーザーが行った、電源ボタンを押す)と自動睡眠(X分後)を区別することは可能ですか? –

関連する問題