24

nie byłem pewien jak szukać tego ...Android PendingIntent przeniesie Cię do już istniejącej działalności?

Mam następujące która jest wywoływana, gdy zadanie jest dodawane lub usuwane z mojego kolejki umieścić zawiadomienie w pasku stanu:

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); 
} 

jak jest teraz zachowanie to:

  • jeśli użytkownik loguje się i uderza zgłoszenie, będzie nadal otwierać nowe FileManagerActivity mogę obejść ten problem poprzez uruchomienie w moim uwierzytelniania (oPS!) aktywność i przekazywanie inte Idź do mojego stosu w naturalnej kolejności, a kiedy aplikacja jest już uruchomiona, mam problemy.

  • jeśli użytkownik ma już otwartą funkcję FileManagerActivity, to powiadomienie spowoduje nadpisanie drugiej instancji. W tym przypadku chcę, aby uruchomiona usługa FileManagerActivity otrzymała fokus zamiast uruchamiania nowej instancji.

Jak mogę uzyskać prawidłowe zachowanie?

Odpowiedz

35

Zrobiłem to już wcześniej, ustawiając mój Activity, aby korzystać z "singleTop" launch mode w Manifest aplikacji. Osiągnie pożądaną funkcję, wykorzystując istniejącą aktywność, o ile taka istnieje. W takim przypadku w Twoim działaniu zostanie wywołany onNewIntent. .

Musisz sprawdzić w FileManagerActivity do uwierzytelniania i rozpocząć nową działalność jako właściwe, jeśli użytkownik nie jest zalogowany

+0

widzę, więc chyba powinienem zrobić parnoid kontrolę we wszystkich moich działaniach uwierzytelniania nie miałbym? –

+0

Dobry pomysł, tak. –

1

myślę Pracował po dodaniu te:

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 zastępuje oczekujące zamiary, jeśli w systemie był już jeden ustawiony w kolejce. Nie ma wpływu na ponowne uruchomienie ostatniej czynności. – ricosrealm

+1

intent.setAction (Long.toString (System.currentTimeMillis())); DZIAŁA JAK CHARM MAN, DZIĘKI BUDDY –