J'ai une application avec des notifications qui ouvrent une certaine activité si je clique dessus. Je veux que, si je clique sur la notification et que l'activité est déjà ouverte, elle n'est pas redémarrée, mais juste mise au premier plan.
Je pensais que je pourrais le faire avec le drapeau FLAG_ACTIVITY_BROUGHT_TO_FRONT
ou FLAG_ACTIVITY_REORDER_TO_FRONT
, mais il continue de l'ouvrir à nouveau donc j'ai l'activité deux fois.
Voici mon code:
event_notification = new Notification(R.drawable.icon,
mContext.getString(R.string.event_notif_message), System.currentTimeMillis());
Intent notificationIntent = new Intent(mContext, EventListActivity.class);
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);
sendNotification(event_notification, notificationIntent, mContext.getString(R.string.event_notif_title),
body, Utils.PA_NOTIFICATIONS_ID);
Puis-je le gérer avec des indicateurs ou dois-je stocker une variable dans SharedPreferences pour vérifier si elle est ouverte ou non?
Merci!
android
notifications
android-activity
Développeur PX
la source
la source
Réponses:
Vous devez définir l'
launchMode
attribut du queActivity
vous commencezsingleTop
. Cela entraînera la livraison d'intentions entrantes à l'instance existante plutôt que de démarrer une nouvelle instance alors qu'elle seActivity
trouve déjà en haut de la pile de la tâche.Cela se fait dans le manifeste en ajoutant
android:launchMode="singleTop"
à l'<activity>
élément. Pour accéder à la dernière intention (si vous êtes intéressé par des données qui peuvent avoir été transmises avec elle), remplacezonNewIntent()
votreActivity
.la source
Essayez de définir les indicateurs à la
Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP
place.D'après la documentation de FLAG_ACTIVITY_CLEAR_TOP (c'est moi qui souligne):
la source
new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP)
.Utilisez
onNewIntent()
pour gérer les nouvelles données à partir de la notification, cliquez sur et actualisez l'activité.Dans
onNewIntent
obtenir les nouvelles données du nouvel intent (qui a servi par la nouvelle notification) et les attraper, par exemple:title = intent.getStringExtra("title")
dans
onCreate
précédemment :)Il actualisera l'activité actuelle avec de nouvelles données de notification.
Vous pouvez également suivre ce tutoriel.
la source
Copiez simplement le code et collez-le dans votre activité principale du lanceur.
Voici la réponse originale
la source
Je pense que vous devriez ajouter une logique pour que cela fonctionne, peut-être que cela peut aider:
Par exemple, j'ai un écran de démarrage (lanceur et principal) de l'application:
Et dans mon FirebaseService, j'ai effectué les opérations suivantes:
la source
la source