J'ai une application Android. Dans ce cas, j'ai une utilisation en firebase pour les notifications push. J'ai besoin d'afficher un message contextué dans ma page d'accueil lors de la réception d'un message dans FirebasemessagingService strong> p> FirebasemessagingService Code> Classe
public BroadcastReceiver myReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getStringExtra("action");
try {
JSONObject mJsonObject = new JSONObject(intent.getExtras().getString("contentdata"));
Log.d("hi...........",intent.getExtras().getString("contentdata"));
Toast.makeText(getApplicationContext(),"hi",Toast.LENGTH_LONG).show();
StartTrackingDriver();
} catch (Exception e){
}
}
};
@Override
protected void onResume() {
super.onResume();
registerReceiver(myReceiver, new IntentFilter("com.driver.approverequest"));
}
@Override
protected void onPause() {
super.onPause();
try {
unregisterReceiver(myReceiver);
}catch (Exception e){}
}
3 Réponses :
registre diffusée dans désinscripteur dans Unregister en Onpause désignera la diffusion chaque fois que votre activité va en arrière-plan. P> strud> p> Vous obtenez une "action" de l'intention mais ne mettez jamais la valeur à l'intention. p> définissez la chaîne à l'intention d'abord. P> oncreate () code>
OnDestroy () code> p>
LocalBroadcastManager.getInstance(context).registerReceiver(myReceiver, new IntentFilter("com.driver.approverequest"));
LocalBroadcastManager.getInstance(context).unregisterReceiver(myReceiver);
LocalBroadcastManager.getInstance(context).sendBroadcast(myIntent);
Pour obtenir une "action" de l'intention, vous devez la définir d'abord dans l'intention.
Bt il ne reçoit pas d'appel à l'intérieur du vide public ONreceive (contexte de contexte, intention d'intention)
@arya FCM a travaillé sur le concept suivant. P>
1 application est devant 2 app est en arrière-plan p>
1 Lorsque l'application est à l'avant, la méthode onreceive sera appelée chaque fois que votre charge utile JSON reçue du serveur P>
2 Lorsque votre application est en arrière-plan, la méthode onreceive sera appelée uniquement lorsque votre JSON ne contient pas de clé "Notification". Si votre charge utile contient la touche de notification, Firebase SDK va gérer tous. P>
String actiondata = remoteMessage.getData().get("action"); if(actiondata.equals("booking")){ Intent myIntent = new Intent("com.driver.approverequest"); myIntent.putExtra("contentdata",contentdata); myIntent.putExtra("requestid",productId); LocalBroadcastManager.getInstance(this).sendBroadcast(myIntent); Log.d(TAG, "Message data : athira send " + message); } //In your HomeActivity @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver(){ @Override public void onReceive(Context context, Intent intent) { String data = intent.getStringExtra("contentdata"); String id = intent.getStringExtra("requestid"); //Write your pop up message logic here } } @Override protected void onResume() { LocalBroadcastManager.getInstance(this).registerReceiver(mBroadcastReceiver,new IntentFilter("com.driver.approverequest")); super.onResume(); } @Override protected void onPause() { LocalBroadcastManager.getInstance(this).unregisterReceiver(mBroadcastReceiver); super.onPause(); }
Vous devez envoyer uniquement la notification de type de données pour obtenir des appels dans votre inpesagereceived. Vérifiez cette réponse Stackoverflow.com/a/54787937/5335382 , puis déclencher une émission si l'activité de la maison est déjà ouverte d'ouverture d'ouverture .