2016-10-31 2 views
0

Ich arbeite an Firebase Push-Benachrichtigung und ich möchte MainActivity schließen. Die Anwendung sollte enden, wenn onMessageReceived() aufgerufen wird. Ich übergebe auch die Context, aber es funktioniert nicht. In diesem Fall werde ich eine Benachrichtigung senden, wenn die Anwendung geöffnet wird. Mein Code:So schließen Sie eine Aktivität mithilfe der Push-Benachrichtigung in Firebase?

MainActivity.java

public class MainActivity extends FragmentActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     new FirebaseMessagingService(MainActivity.this); 
    } 
} 

FirebaseMessagingService.java

public class FirebaseMessagingService extends 
      com.google.firebase.messaging.FirebaseMessagingService { 

    Context context; 
    public FirebaseMessagingService(Context ctx) { 
     this.context = ctx; 
    } 

    @Override 
    public void onMessageReceived(RemoteMessage remoteMessage) { 
     context.finish(); 
    } 
} 

Antwort

3

könnten Sie definieren eine BroadcastReceiver in MainActivity, das finish() ruft, wenn sie ausgelöst:

private final BroadcastReceiver finishReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     finish(); 
    } 
}; 

Register/deregistrieren es bei Bedarf:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    // ... 

    LocalBroadcastManager.getInstance(getApplicationContext()) 
     .registerReceiver(finishReceiver, 
      new IntentFilter(FirebaseMessagingService.ACTION_FINISH)); 
} 

@Override 
protected void onDestroy() { 
    LocalBroadcastManager.getInstance(getApplicationContext()) 
     .unregisterReceiver(finishReceiver); 
    super.onDestroy(); 
} 

Und dann einfach Sie nur eine lokale Broadcast von onMessageReceived() senden:

public static final String ACTION_FINISH = "yourpackagename.ACTION_FINISH"; 

@Override 
public void onMessageReceived(RemoteMessage remoteMessage) { 
    LocalBroadcastManager.getInstance(getApplicationContext()) 
     .sendBroadcast(new Intent(ACTION_FINISH)); 
} 

(FirebaseMessagingService eine Context Unterklasse ist, besteht keine Notwendigkeit, zu Pass eine andere Context Instanz zu ihm)

Verwandte Themen