2011-07-04 10 views
16

Mam aplikację, która odtwarza multimedia za pomocą usługi. Działa to płynnie przy pomocy usługi (tworzone jest bieżące powiadomienie). Po naciśnięciu klawisza cofania aplikacja przechodzi do tła. Problem polega na tym, że po kliknięciu ikony powiadomień za każdym razem tworzone jest nowe wystąpienie mojej aplikacji. Jak mogę pobrać aplikację z tła do przodu za pomocą paska powiadomień?Jak przenieść aplikację na wierzch po kliknięciu ikony powiadomienia (z usługi)?

Moje zgłoszenie wygląda następująco:

private void notifyMe() { 
    final NotificationManager mgr = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 
    Notification note = new Notification(R.drawable.icon_audio, "Online!", 
      System.currentTimeMillis()); 
    note.flags = Notification.FLAG_ONGOING_EVENT; 
    PendingIntent i = PendingIntent.getActivity(this, 0, new Intent(this, PlayMedia.class), 0); 
    note.setLatestEventInfo(this, "Media Payer", "Online",i); 
    mgr.notify(NOTIFY_ME_ID, note); 
} 

ROZWIĄZANIE Dostałem go do pracy przez dodanie następującej linii w pliku manifestu: android: launchMode = „singleInstance” Intencją flaga nie zrobił” t ma żadnego wpływu, że to było dziwne ...

Odpowiedz

3

intencją które przechodzą do PendingIntent.getActivity musi mieć odpowiednią flagę ustawioną przynieść uruchomionej aplikacji do przodu. Więc:

Intent startActivity = new Intent(this,PlayMedia.class); 
startActivity.setFlags(Intent.*appropriate flag*); 
PendingIntent i = PendingIntent.getActivity(this, 0, startActivity, 0); 

Idź do http://developer.android.com/reference/android/content/Intent.html i wyszukiwania (Ctrl + F) dla "flag_". Tam znajdziesz listę flag, których możesz użyć.

+17

Dla tych, czytając to pytanie + odpowiedzi, chociaż Pytający przyjął tę odpowiedź jako najlepszą, to nie jest rozwiązanie, które rozwiązać jego problem. Aby uzyskać poprawne rozwiązanie, przeczytaj ostatnią część pytania: – Marmoy

+0

Byłoby miło, gdyby powiedział, gdzie w pliku xml umieścić to lub pokazać kod XML. – JPM

+0

O ile pamiętam ustawić launchMode jako atrybut do elementu (-ów) działalność w manifeście, który chcesz zmienić zachowanie startowa. – Marmoy

3

Po prostu odmiana odpowiedzi i komentarz do pytania. Nie musiałem dodawać androida: launchMode = "singleInstance", jak sugeruje Alpar. To właśnie zrobiłem, aby aplikacja pojawiła się na pierwszym planie.

// this code brings the application from background to foreground 
// when the Notification icon is clicked on. 

// create new notification 
int icon = R.drawable.ic_notify; 
Notification notification = new Notification(icon, "Ticker Text", System.currentTimeMillis()); 

// Create new Intent pointing to activity you want it to come back to 
Intent notificationIntent = new Intent(this, MainApp.class); 

// Add new intent to a pending intent 
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT); 

// add that pendingIntent to the new notification 
notification.setLatestEventInfo(getApplicationContext(), "Title", "Text", contentIntent); 

// send the intent to the NotificationManager 
((NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE)).notify(UPLOADER_ID, notification); 
1

Wszystko to już nie działa w Androidzie 5. Próbowałem wszystkie powyższe sugestie i moja aplikacja prowadzonego coraz zniszczony i ponownie, gdy kliknąłem powiadomienie.

Aby go naprawić, wszystko, co potrzebne do zrobienia było dodać 2 flagi do Intencyjny:

Intent resultIntent = new Intent(context, MainActivity.class); 
resultIntent.setAction(Intent.ACTION_MAIN); 
resultIntent.addCategory(Intent.CATEGORY_LAUNCHER); 
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, resultIntent, 0); 

To przyniesie aplikację tyłu do przodu, jak gdyby był na podsłuchu z ekranu uruchamiania.

+0

pracował dla mnie w połączeniu z android: launchMode = „singleTask” tak +1 ponieważ wszystkie inne nie –

Powiązane problemy