Voglio mettere un'icona nella barra di stato quando la mia applicazione è in esecuzione, anche quando è in esecuzione in background. Come posso fare questo?Come mostrare un'icona nella barra di stato quando l'applicazione è in esecuzione, anche in background?
risposta
Si dovrebbe essere in grado di fare questo con notifica e la NotificationManager. Tuttavia, ottenere un modo sicuro per sapere quando la tua applicazione non è in esecuzione è la parte difficile.
è possibile ottenere la funzionalità di base di che cosa state desiderando facendo qualcosa di simile:
Notification notification = new Notification(R.drawable.your_app_icon,
R.string.name_of_your_app,
System.currentTimeMillis());
notification.flags |= Notification.FLAG_NO_CLEAR
| Notification.FLAG_ONGOING_EVENT;
NotificationManager notifier = (NotificationManager)
context.getSystemService(Context.NOTIFICATION_SERVICE);
notifier.notify(1, notification);
questo codice deve essere da qualche parte dove si è sicuri andranno licenziato all'avvio del applicativi. Probabilmente nel metodo onCreate() dell'oggetto dell'applicazione personalizzato dell'applicazione.
Tuttavia dopo che le cose sono difficili. L'uccisione dell'applicazione può avvenire in qualsiasi momento. Quindi puoi provare a mettere qualcosa anche nel onTerminate() della classe Application, ma non è garantito che venga chiamato.
((NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE)).cancel(1);
sarà ciò che è necessario per rimuovere l'icona.
Dai un'occhiata alla Guida Dev "Creating Status Bar Notifications".
Un modo per raggiungere l'obiettivo di mantenere l'icona non solo quando l'applicazione è in esecuzione è di inizializzare la notifica nella onCreate()
e chiamare cancel(int)
nel metodo onPause()
solo se isFinishing()
restituisce true.
Un esempio:
private static final int NOTIFICATION_EX = 1;
private NotificationManager notificationManager;
@Override
public void onCreate() {
super.onCreate();
notificationManager = (NotificationManager)
getSystemService(Context.NOTIFICATION_SERVICE);
int icon = R.drawable.notification_icon;
CharSequence tickerText = "Hello";
long when = System.currentTimeMillis();
Notification notification = new Notification(icon, tickerText, when);
Context context = getApplicationContext();
CharSequence contentTitle = "My notification";
CharSequence contentText = "Hello World!";
Intent notificationIntent = new Intent(this, MyClass.class);
PendingIntent contentIntent = PendingIntent.getActivity(this,
0, notificationIntent, 0);
notification.setLatestEventInfo(context, contentTitle,
contentText, contentIntent);
notificationManager.notify(NOTIFICATION_EX, notification);
}
@Override
protected void onPause() {
super.onPause();
if (isFinishing()) {
notificationManager.cancel(NOTIFICATION_EX);
}
}
Questo mostrerà solo se una determinata attività è in esecuzione. Non se l'applicazione è ancora in esecuzione. –
@Greg: a destra, questo codice di esempio gestisce solo correttamente un'applicazione con una sola attività. È molto più difficile determinare quando il sistema ha ucciso l'applicazione. Come hai detto, una classe 'Application' personalizzata è probabilmente il posto migliore per il codice poiché persiste per tutta la vita dell'applicazione. Cancellare la notifica sarà difficile perché il sistema potrebbe decidere arbitrariamente di interrompere il processo di un'app in condizioni di memoria insufficiente. Si potrebbe provare a creare un servizio per monitorare lo stato poiché il sistema proverà a riavviare il servizio in seguito quando sarà disponibile più memoria. – Brian
Se si rimuove 'notificationManager.cancel (NOTIFICATION_EX);' da 'onPause' la notifica rimarrà nella barra di notifica fino a quando l'applicazione non verrà completamente arrestata. –
Per nuova API è possibile utilizzare NotificationCompat.Builder
-
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this)
.setSmallIcon(R.mipmap.ic_launcher)
.setContentTitle("Title");
Intent resultIntent = new Intent(this, MyActivity.class);
PendingIntent resultPendingIntent = PendingIntent.getActivity(
this,
0,
resultIntent,
PendingIntent.FLAG_UPDATE_CURRENT);
mBuilder.setContentIntent(resultPendingIntent);
Notification notification = mBuilder.build();
notification.flags |= Notification.FLAG_NO_CLEAR | Notification.FLAG_ONGOING_EVENT;
mNotifyMgr = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
mNotifyMgr.notify(NOTIFICATION_ID, notification);
Mostrerà il tempo che l'applicazione è in esecuzione e qualcuno chiude manualmente l'applicazione. Puoi sempre annullare la notifica chiamando -
mNotifyMgr.cancel(NOTIFICATION_ID);
cosa sarà sii il contenuto di MyActivity.class? @mjosh –
@Sarahcartenz Qualcosa che vuoi veramente – mjosh
e se non definissi una classe del genere? o tienilo vuoto. non voglio un'azione una volta che la notifica è stata premuta, per esempio. –
Funziona davvero. ho creato un metodo fuori l'esempio precedente:
private void applyStatusBar(String iconTitle, int notificationId) {
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this)
.setSmallIcon(R.mipmap.ic_launcher)
.setContentTitle(iconTitle);
Intent resultIntent = new Intent(this, ActMain.class);
PendingIntent resultPendingIntent = PendingIntent.getActivity(this, 0, resultIntent, PendingIntent.FLAG_UPDATE_CURRENT);
mBuilder.setContentIntent(resultPendingIntent);
Notification notification = mBuilder.build();
notification.flags |= Notification.FLAG_NO_CLEAR|Notification.FLAG_ONGOING_EVENT;
NotificationManager mNotifyMgr = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
mNotifyMgr.notify(notificationId, notification);}
Dovrebbe essere chiamato come: applyStatusBar ("Barra di stato Test", 10);
se posso chiedere, quale sarà il contenuto di ActMain.class? –
- 1. Android - Esecuzione di un'attività in background ogni 15 minuti, anche quando l'applicazione non è in esecuzione
- 2. Come mostrare una notifica anche applicazione non è in esecuzione
- 3. Visualizzazione di un'icona nella barra di stato quando è in esecuzione la mia attività
- 4. Come impedire a iOS 5 di mostrare la barra di stato anche se UIStatusBarHidden è YES?
- 5. OSX: come "mostrare" un elemento della barra di stato?
- 6. Studio Android Mostra le attività in background nella barra di stato invece di una finestra mobile
- 7. Pausa timer quando applicazione è in background stato di Swift
- 8. Nascondere/Mostrare la barra di stato
- 9. Come mostrare searchResultsTableView quando la barra di ricerca è attivata?
- 10. Come aggiungere l'icona della mia app nella barra di stato quando la mia app è in esecuzione?
- 11. Visualizza notifica push nella finestra di avviso quando l'applicazione è in esecuzione in primo piano
- 12. come mostrare la barra di stato nella finestra della barra multifunzione wpf C#
- 13. Esecuzione di matlab in background
- 14. Esecuzione di WebView in background
- 15. Python/wxPython: esecuzione continua in background
- 16. applicazione non è in esecuzione in background in iOS 7
- 17. Come mantenere un servizio in esecuzione in background anche dopo che l'utente ha chiuso l'app?
- 18. Applicazione in esecuzione in background
- 19. android: come verificare se l'applicazione è in esecuzione in background
- 20. UILocalNotification - Come gestire quando l'applicazione NON è in esecuzione?
- 21. document.body.scrollTop è sempre 0 in IE anche quando si scorre
- 22. Come mostrare lo stato di "Caricamento" in Android?
- 23. Come mostrare la notifica dal servizio in background?
- 24. Come creare un servizio in background sempre in esecuzione?
- 25. In esecuzione: make da gVim in background
- 26. - Esecuzione in background dal servizio
- 27. iOS: Mantieni l'applicazione in esecuzione in background
- 28. Android: utilizzo di AUTO-CANCEL su una notifica quando l'app è in esecuzione in background
- 29. Programma Java in esecuzione in background
- 30. tenere applicazione in esecuzione in background
'Notifica 'è stato dichiarato obsoleto in livello API 11. Utilizzare invece Notification.Builder. –
Se si utilizza anche 'Servizio', non è necessario rimuovere manualmente la notificazione.Quando il servizio viene interrotto, la notifica verrà automaticamente rimossa. ("Tuttavia, se si interrompe il servizio mentre è ancora in esecuzione in primo piano, viene anche rimossa la notifica." Https://developer.android.com/guide/components/services.html#Foreground) –