getIntent() Extras toujours NULL
J'ai écrit une simple Application Android qui montrent une coutume de Notification comme ceci:
Context context = getApplicationContext();
NotificationManager manager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
Notification notification = new Notification( R.drawable.icon, title, System.currentTimeMillis());
Intent notificationIntent = new Intent( context, this.getClass());
notificationIntent.putExtra("com.mysecure.lastpage", "SECURECODE");
PendingIntent pendingIntent = PendingIntent.getActivity( context , 0, notificationIntent, 0);
notification.flags = notification.flags | Notification.FLAG_ONGOING_EVENT;
notification.contentView = new RemoteViews(context.getPackageName(), R.layout.notifypbar);
notification.contentIntent = pendingIntent;
notification.contentView.setTextViewText(R.id.notifypb_status_text, text);
notification.contentView.setProgressBar(R.id.notifypb_status_progress, 100, (int)(100*progress), false);
manager.notify(104, notification);
Ce morceau de code est appelé qu'une SEULE FOIS dans ma demande et il affiche une notification avec une barre de progression (tous correctement).
Désormais, lorsqu'un utilisateur clique sur cette notification de mon application gère les onResume
événement.
public void onResume()
{
super.onResume();
//TODO: Extras è SEMPRE NULL!!! impossibile!
Intent callingintent = getIntent();
Bundle extras = callingintent.getExtras();
mais extras est toujours NULLE!
J'ai essayé toute combinaison de:
notificationIntent.putExtra("com.mysecure.lastpage", "SECURECODE");
ou
Bundle extra = new Bundle();
extra.putString(key, value);
notificationIntent.putExtra(extra);
mais getIntent().getExtras() renvoie toujours NULL.
- Avez-vous essayer de définir le Contexte de l'Application à l'intérieur de la Notification?
Vous devez vous connecter pour publier un commentaire.
C'est le scénario:
La méthode
getIntent()
retourne la PREMIÈRE intention de lancer l'activité.Ainsi, lorsque l'activité est FERMÉ (fin) et que l'utilisateur clique sur la notification, il sera exécuté une nouvelle instance de l'activité et
getIntent()
fonctionne comme prévu (Extras est pasnull
).Mais si l'activité est "endormi" (il est dans le fond) et que l'utilisateur clique sur la notification,
getIntent()
renvoie toujours la PREMIÈRE intention qui a commencé l'activité et NON de la notification de l'intention.Afin d'attraper la notification de l'intention, tandis que l'application est en cours d'exécution, il suffit d'utiliser cette
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);
puis remplacer
onNewIntent(Intent newintent)
.Ainsi lorsqu'une application s'exécute en premier,
getIntent()
peuvent être utilisés lors de l'application de la reprise de dormir,onNewIntent
œuvres.Viens d'Écrire ce code au-dessus de votre sur le dessus de votre méthode de Résumé (). C'est tout ce qu'il faut. Cette actualise intention - je ne sais pas vraiment, mais il fonctionne.
Problème: Vous envoyer le même code de la demande pour l'attente de votre intens. Changer cela.
Solution: Set global variable de type int UNIQUE_INT_PER_CALL =0 et lorsque vous créez pendingIntent appel comme ci-dessous.
UNIQUE_INT_PER_CALL++; //incrémente.
int notificationId = new Random().nextInt();
Depuis, il semble que votre activité est déjà en cours d'exécution, je pense que vous devez spécifier
FLAG_UPDATE_CURRENT
, sinon legetIntent()
appel sera de retour à la précédente. Voir cette réponse.Regarder Partagé Préférences pour la transmission et la récupération persistante des paires clé/valeur.