77 votes

getIntent() Extras toujours NULLE!

Salut les gars, mon problème est simple. J'ai écrit une simple Application Android qui montrent une coutume de Notification de ce genre.

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).

Maintenant... quand un utilisateur clique sur cette notification ma demande poignées 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é toutes les combinaisons 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.

quelqu'un peut m'aider les gars?

merci à l'avance!

119voto

Magius Points 551

!RÉSOLU!

C'est le scénario:
La Méthode getIntent() renvoie 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 n'est PAS NULLE).

Mais si l'activité est en "Sommeil", 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);

et que de surcharger onNewIntent(Intent newintent).

donc.. lorsque l'application s'exécute en premier, getIntent() peuvent être utilisés lors de l'application de la reprise de dormir, onNewIntent travaux.

c'est tout.

Merci à tous et désolé pour mon mauvais anglais :-)

99voto

coolcool1994 Points 526

Il suffit 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.

@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    setIntent(intent);
}

20voto

Muhammad Mubashir Points 530

Problème: Vous voulez envoyer le même code de la demande pour l'attente de votre intens. Changer cela.

Solution: Définir une variable globale de type int UNIQUE_INT_PER_CALL =0 et lorsque vous créez pendingIntent appel comme ci-dessous.

 PendingIntent contentIntent = PendingIntent.getActivity(context, UNIQUE_INT_PER_CALL, notificationIntent, 0);

UNIQUE_INT_PER_CALL++; // incrémente.

3voto

dmon Points 20795

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 l' getIntent() appel sera de retour à la précédente. Voir cette réponse.

-9voto

apesa Points 3725

Regardez Partagé Préférences pour la transmission et la récupération persistante des paires clé/valeur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X