2017-04-25 32 views
1

このBroadcastReceiverを使用すると、デバイス画面がオフになるたびにアクティビティを起動できます。唯一の問題は、同じアクティビティが2回開始されることです。私は、あなたが効果的にあなたScreenReceiverの2つのインスタンスを登録するため、二回応答、および作成している活動のOnCreateのAndroid BroadcastReceiver開始アクティビティ

IntentFilter intentFilter = new IntentFilter(Intent.ACTION_SCREEN_ON); 
intentFilter.addAction(Intent.ACTION_SCREEN_OFF); 
mReceiver = new ScreenReceiver(); 
registerReceiver(mReceiver, intentFilter); 

マニフェスト

<receiver android:name="utils.ScreenReceiver" 
      android:enabled="true"> 
    <intent-filter> 
     <action android:name="android.intent.action.SCREEN_OFF" /> 
     <action android:name="android.intent.action.SCREEN_ON" /> 
    </intent-filter> 
</receiver> 
+0

アクティビティのライフサイクルで受信機を登録/登録解除していますか? – denispyr

答えて

2

に発行し

public class ScreenReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(final Context context, Intent intent) {  

     if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) { 
      intent = new Intent(context, Login2.class); 
      context.startActivity(intent);    
     } 
    } 
} 

スタートレシーバーを理解していませんあなたのActivityの2つのバージョン。マニフェストに適用された<intent-filter>を使用して最初にシステム全体を登録しています。次に、registerReceiver(mReceiver, intentFilter);への電話でScreenReceiverの別のインスタンスを登録しています。 BroadcastReceiverの登録には1つのメカニズムしか使用しないでください。

ActivityregisterReceiver(mReceiver, intentFilter);メソッドを使用している場合は、受信者の登録を解除するようにしてください。

+0

あなたは正しいです。本当にありがとう –

関連する問題