2017-04-25 4 views
1

Avec ce BroadcastReceiver, je peux lancer une activité chaque fois que l'écran de l'appareil s'éteint. Le seul problème est que la même activité est démarrée 2 fois. Je ne comprends pas la questionAndroid BroadcastReceiver démarre l'activité

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);    
     } 
    } 
} 

récepteur de démarrage dans oncreate d'activité

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

manifeste

<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

êtes-vous regitering/unregistering le récepteur dans le cycle de vie de l'activité? – denispyr

Répondre

2

Vous enregistrez efficacement deux instances de votre ScreenReceiver et répondant ainsi à deux reprises, et la création deux versions de votre Activity. Vous enregistrez d'abord le système à l'aide du <intent-filter> appliqué dans votre manifeste. Deuxièmement, vous enregistrez une instance différente de ScreenReceiver avec votre appel au registerReceiver(mReceiver, intentFilter);. Vous devez utiliser un seul mécanisme pour enregistrer votre BroadcastReceiver.

En outre, assurez-vous que vous appelez pour annuler l'inscription du récepteur si vous respectez la méthode ActivityregisterReceiver(mReceiver, intentFilter);.

+0

Vous avez raison. Merci beaucoup –