2013-04-09 11 views
6

Ho bisogno di aiuto per fare qualcosa. Provo a visualizzare una notifica nella barra di stato di Android.Android Visualizza una notifica nella barra di stato senza una vista espandibile

Informerà l'utente che è in corso una sincronizzazione con il server.

Ora, io uso questo codice e funziona benissimo:

NotificationCompat.Builder builder = new NotificationCompat.Builder(this) 
      .setSmallIcon(android.R.drawable.stat_notify_sync).setWhen(System.currentTimeMillis()) 
      .setAutoCancel(false).setOngoing(true); 

    NotificationManager nm = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE); 
    Notification notif = builder.getNotification(); 
    nm.notify(1, notif); 

L'unico problema è che la vista si crea quando l'utente espandere la barra di stato. Quello che voglio fare è visualizzare solo una piccola icona nella parte superiore della barra di stato, senza la contentview.

Qualcuno sa come farlo? Grazie in anticipo!

+0

ho visto diversi risposta da CommonsWare che dicono che non è possibile, ma ho visto anche in s app per sempre (ad es. Yahoo Mail) che lo rendono –

risposta

3

Questo non è possibile.

Il razionale è questo: se l'utente guarda la barra di stato e vede un'icona, dovrebbe avere un modo di capire cosa significhi quell'icona. Pertanto deve esserci una riga nel pannello delle notifiche corrispondente a ciascuna icona.

Suggerisco di creare una notifica che spieghi, come è stato fatto nella domanda, che è in corso una sincronizzazione; questa è una grande opportunità per indicare quale app è attualmente sincronizzata (quindi se c'è un qualche tipo di problema o la sincronizzazione sta prendendo per sempre l'utente sa quale app richiede attenzione).

+0

Grazie per la risposta. Ho visto che Yahoo Mail fa una notifica senza una vista spendibile, quindi è strano ... –

+0

Davvero? Non è davvero possibile creare un'icona senza una riga nell'ombra della notifica. Puoi indicarmi uno screenshot o qualcosa del genere? – dsandler

+0

Ho sbagliato con Yahoo Mail. L'icona visualizzata dall'app Yahoo è l'icona di sincronizzazione, visualizzata dal sistema operativo. Uso un modo diverso per avvisare l'utente mentre l'app effettua una connessione al server ;-) Grazie! –

1

È possibile utilizzare questo metodo per mostrare l'icona di notifica sulla barra di stato

private void showNotification() { 
    nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 
    // In this sample, we'll use the same text for the ticker and the 
    // expanded notification 

    // Set the icon, scrolling text and timestamp 
    Notification notification = new Notification(R.drawable.ic_launcher, 
      "Service Started", System.currentTimeMillis()); 
    // The PendingIntent to launch our activity if the user selects this 
    // notification 
    PendingIntent contentIntent = PendingIntent.getActivity(this, 0, 
      new Intent(this, MainActivity.class), 0); 
    // Set the info for the views that show in the notification panel. 
    notification.setLatestEventInfo(this, getText(R.string.service_label), 
      "Service Started", contentIntent); 
    // Send the notification. 
    // We use a layout id because it is a unique number. We use it later to 
    // cancel. 
    nm.notify(R.string.service_started, notification); 

} 
+0

Grazie per la tua risposta ma non è quello che voglio. Il tuo codice fa la stessa cosa che è mia (e questo modo di istanziare una notifica è deprecato). Non voglio una vista nel pannello delle notifiche, ma solo la piccola icona nella barra di stato Se non metto una vista per il pannello delle notifiche, si verifica questa eccezione: 'java.lang.IllegalArgumentException: contentView richiesto : pkg = com.test.app.notification id = 1 notifica = Notifica (pri = 0 contentView = null vibrate = null audio = null defaults = 0x0 flags = 0x0 kind = [null]) ' –

0

Bene, questo è possibile per un InputMethodService, basta usare showStatusIcon (nome_risorsa). Ma penso che non sia una buona idea per niente tranne i servizi di input.

0
Context context = TutListDownloaderService.this 
.getApplicationContext(); 
NotificationManager notificationManager = (NotificationManager) context 
.getSystemService(NOTIFICATION_SERVICE); 

creare la notifica:

Notification updateComplete = new Notification(); 
updateComplete.icon = android.R.drawable.stat_notify_sync; 
updateComplete.tickerText = context.getText(R.string.notification_title); 
updateComplete.when = System.currentTimeMillis(); 

Crea attesa Oggetto:

Intent notificationIntent = new Intent(context,TutListActivity.class); 
PendingIntent contentIntent = PendingIntent.getActivity(context, 0, 
notificationIntent, 0); 

String contentTitle = context.getText(R.string.notification_title).toString(); 
String contentText; 
if (!result) { 
Log.w(DEBUG_TAG, "XML download and parse had errors"); 
contentText = context.getText(R.string.notification_info_fail).toString(); 
} else { 
contentText = context.getText(
    R.string.notification_info_success).toString(); 
} 
updateComplete.setLatestEventInfo(context, contentTitle, contentText, contentIntent); 

mostrano infine la notifica all'utente:

notificationManager.notify(LIST_UPDATE_NOTIFICATION, updateComplete); 
Problemi correlati