24

était pas vraiment sûr comment rechercher cette ...Android PendingIntent vous amène à une activité déjà existante?

J'ai un qui suit qui est appelée chaque fois qu'un emploi est ajouté ou supprimé de ma file d'attente pour mettre une notification dans la barre d'état:

private void showNotification() 
{ 
    int jobsize = mJobQueue.size(); 
    int icon = (jobsize == 0) ? 
     android.R.drawable.stat_sys_upload_done : 
     android.R.drawable.stat_sys_upload; 
    Notification notification = 
     new Notification(icon, "Test", System.currentTimeMillis()); 
    Intent intent = new Intent(this, FileManagerActivity.class); 
    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0); 

    notification.flags = 
     (Notification.FLAG_SHOW_LIGHTS | Notification.FLAG_AUTO_CANCEL); 
    notification.setLatestEventInfo(this, 
     "Uploading to our servers", 
     getString((jobsize > 0) ? 
      R.string.notification_active_transfers : 
      R.string.notification_no_transfers), 
     pendingIntent); 

    mNotifyManager.notify(NOTIFICATION, notification); 
} 

Comme il est maintenant le comportement est ceci:

  • si l'utilisateur se déconnecte et frappe la notification, il sera toujours ouvrir une nouvelle FileManagerActivity je pouvais contourner ce problème en commençant à mon authentification (ops!) activité et passant le inte nt ma pile dans un ordre naturel, c'est quand l'application est déjà en cours d'exécution est où j'ai des difficultés. Si l'utilisateur a déjà ouvert le fichier FileManagerActivity en cliquant sur la notification, une seconde instance le recouvrira. Dans ce cas, je souhaite que FileManagerActivity en cours d'exécution obtienne le focus au lieu de lancer une nouvelle instance.

Comment puis-je obtenir le comportement correct?

Répondre

35

Je l'ai déjà fait en réglant mon Activity pour utiliser le launch mode 'singleTop' dans le manifeste d'application. Il atteindra la fonction désirée, en utilisant l'activité existante s'il en existe une. Dans ce cas, onNewIntent sera appelé dans votre activité. .

Vous devez vérifier dans votre FileManagerActivity pour l'authentification et commencer une nouvelle activité appropriée si l'utilisateur n'est pas connecté

+0

Je vois, donc je devrais probablement faire une vérification parnoid dans toutes mes activités pour l'authentification je ne devrais pas? –

+0

Bonne idée, oui. –

1

Je pense Travaillé lorsqu'il est ajouté ces:

intent.setAction (Long .toString (System.currentTimeMillis()));

PendingIntent.FLAG_UPDATE_CUR

Intent intent = new Intent(context, MyOwnActivity.class); 
intent.putExtra("foo_bar_extra_key", "foo_bar_extra_value"); 
intent.setAction(Long.toString(System.currentTimeMillis())); 
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0,intent,PendingIntent.FLAG_UPDATE_CURRENT); 
+3

PendingIntent.FLAG_UPDATE_CURRENT remplace l'intention en attente s'il y en avait déjà une dans le système. Cela n'a aucun effet sur le redémarrage de la dernière activité. – ricosrealm

+1

intention.setAction (Long.toString (System.currentTimeMillis())); TRAVAILLE COMME UN HOMME DE CHARME, MERCI BUDDY –

Questions connexes