2016-03-21 21 views
1

これは私のコードです。SCREEN_OFF BroadcastReceiverが機能しません

public class MyActivity extends Activity { 
    ... 
    @Override 
    protected void onStart() { 
     super.onStart(); 

     IntentFilter intentFilter = new IntentFilter(); 
     intentFilter.addAction("com.my.ACTION"); 
     intentFilter.addAction(Intent.ACTION_SCREEN_OFF); 

     registerReceiver(broadcastReceiver, intentFilter); 
    } 

    @Override 
    protected void onStop() { 
     super.onStop(); 

     unregisterReceiver(broadcastReceiver); 
    } 

    ... 

    private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      String action = intent.getAction(); 

      if ("com.my.ACTIOIN".equals(action)) { 
       updateMessageInformation(intent); 
       updateDialog(); 
      } else if (Intent.ACTION_SCREEN_OFF.equals(action)) { 
       finish(); 
      } 
     } 
    }; 
    ... 
} 

com.my.ACTION検出され、正しく

作業しかし、画面がオフにするとIntent.ACTION_SCREEN_OFF(android.intent.action.SCREEN_OFF)は検出されませんされています。

Activityは、Serviceから始まります(他の受信者から開始)。

何が間違っていますか?

+1

あなたはonDestroyで登録を解除しますか?意図が送信される前にアクティビティが破棄されたため、アクティビティで受信できない可能性がありますか? – galex

+0

私はonStopでレシーバの登録を解除します。 –

+0

@galexありがとう。 unregisterをonDestroyに移動すると、正しく動作します。 –

答えて

0

unregisteronDestroyに移動します。画面がオフになると、onStopが呼び出し中です。

リファレンスhttps://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle

アクティビティが表示されていない場合には、onStopメソッドが呼び出されます。

@Override 
protected void onDestroy() { 
    super.onDestroy(); 

    unregisterReceiver(broadcastReceiver); 
} 
関連する問題