2011-10-23 20 views
6

Ho una classe che estende BroadcastReceiver che viene chiamato ogni volta che sono disponibili nuovi risultati di scansione Wifi (il ricevitore è registrato nel manifest con la scansione Scan_Results come filtro intent).Notifica show Android da BroadcastReceiver

Da questa classe, voglio essere in grado di mostrare una notifica all'utente. Attualmente, passo il contesto che viene ricevuto come parametro nel metodo onReceive della mia classe di intenti broadcast a un metodo "show notification" di un'altra classe.

Quando si arriva alla linea:

myNotificationManager.notify(notificationId, notification); 

non riesce con la seguente eccezione:

java.lang.IllegalArgumentException: contentView required: pkg=com.mumfordmedia.trackify id=2131034122 notification=Notification(vibrate=null,sound=null,defaults=0x0,flags=0x0) 

Qualsiasi idea del perché questo sta accadendo? Tutto quello che posso pensare è perché il contesto che sto ottenendo dal parametro onReceive non è ... per mancanza di una frase migliore, "giusto per il lavoro" ...

Qualche idea? Grazie, max.

+1

Forse questo http://stackoverflow.com/questions/2826786/pendingintents-in-notifications aiuterà. Ad ogni modo, mostraci altro codice in modo che possiamo aiutarti. – Jong

+2

Per favore, mostraci un po 'del tuo codice in modo che possiamo avere un'idea migliore di cosa sta succedendo. –

+0

A proposito, benvenuto su StackOverflow! Se una risposta è utile, si prega di votarla. Se la risposta risponde correttamente alla tua domanda, fai clic sul segno di spunta verde accanto ad essa per accettare la risposta. –

risposta

0

Da quello che posso dire, quando si crea la notifica per passare al Gestore delle notifiche, non si sta dando una visualizzazione del contenuto da visualizzare. Esamina la riga in cui effettivamente crei la notifica per vedere se stai effettivamente dando alla notifica una visualizzazione da visualizzare.

+0

Ho copiato e incollato lo script di notifica da un'altra posizione nell'app in cui funziona.Non è disponibile la visualizzazione del contenuto perché è attivata da una classe che estende BroadcastReceiver senza layout. Perché ha bisogno di una vista del contenuto? Esaminerò la documentazione in poche ore ... grazie per la risposta btw –

2

Non so esattamente il motivo per cui non funzionava prima, ma qui è il codice che ho ottenuto che funziona con:

Dichiarare la seguente al di fuori di qualsiasi metodo:

int YOURAPP_NOTIFICATION_ID = 1234567890; 
NotificationManager mNotificationManager; 

Poi nel metodo OnReceive chiamare il seguente :

mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 
showNotification(context, R.drawable.icon, "short", false); 

quindi dichiarare il seguente metodo:

private void showNotification(Context context, int statusBarIconID, String string, boolean showIconOnly) { 
     // This is who should be launched if the user selects our notification. 
     Intent contentIntent = new Intent(); 

     // choose the ticker text 
     String tickerText = "ticket text"; 

     Notification n = new Notification(R.drawable.icon, "ticker text", System.currentTimeMillis()); 

     PendingIntent appIntent = PendingIntent.getActivity(context, 0, contentIntent, 0); 

     n.setLatestEventInfo(context, "1", "2", appIntent); 

     mNotificationManager.notify(YOURAPP_NOTIFICATION_ID, n); 
    } 
+0

questo codice per me. grazie :) – IRvanFauziE

2

Devi chiamare Notification.setLatestEventInfo().

1

Usa questo codice con il vostro notifica

Intent intent = new Intent(this, MusicDroid.class); 
PendingIntent activity = PendingIntent.getActivity(this, 0, intent, 0); 
notification.setLatestEventInfo(this, "This is the title", 
    "This is the text", activity); 
notification.number += 1; 

nm.notify(NOTIFY_ID, notification); 
14

contentView è la vista che è necessaria quando la notifica viene cliccato. Il codice sotto funziona bene e il metodo setLatestEventInfo() è obbligatorio.

NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 
    Notification notification = new Notification(R.drawable.ic_launcher, 
      "Hello from service", System.currentTimeMillis()); 
    Intent intent = new Intent(this, MainActivity.class); 
    notification.setLatestEventInfo(this, "contentTitle", "contentText", 
      PendingIntent.getActivity(this, 1, intent, 0)); 
    manager.notify(111, notification); 
+1

+1: l'utilizzo di setLatestEventInfo() fa sì che l'errore si risolva. È un po 'fastidioso quante righe di codice ci vogliono per visualizzare una notifica così semplice ... – ArtOfWarfare

0

Per coloro che utilizzano NotificationCompat, il seguente codice funziona:

NotificationCompat.Builder n = new NotificationCompat.Builder(this) 
    .setSmallIcon(R.drawable.icon).setContentText("Notify Title").setContentText("Sample Text"); 
    NotificationManager nm = (NotificationManager)getSystemService(NOTIFICATION_SERVICE); 
    Intent i = new Intent(this,MainActivity.class); 
    PendingIntent ac = PendingIntent.getActivity(this, 0, i, 0); 
    n.setContentIntent(ac); 
    nm.notify(12222, n.build()); 
Problemi correlati