2012-01-27 7 views
10

Ho cercato di ottenere una notifica di un caricamento riuscito da un ASyncTask per funzionare tutto il giorno. Non ricevo errori dal mio codice corrente ma non riesco a visualizzare la notifica nella barra delle notifiche (o in qualsiasi altro luogo). Non ricevo alcun messaggio in LogCat e non appare alcuna notifica nella barra di notifica. Questo è il mio codice:Notifica Android non funzionante

Notification mNotification = new Notification(icon, tickerText, when); 

CharSequence contentTitle = "upload completed."; 
CharSequence contentText = "upload completed."; 

Intent notificationIntent = new Intent(context, CastrActivity.class); 
PendingIntent contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, PendingIntent.FLAG_NO_CREATE); 
mNotification.contentIntent = contentIntent; 
mNotification.setLatestEventInfo(context, contentTitle, contentText, contentIntent); 
mNotificationManager.notify(NOTIFICATION_ID, mNotification); 

Questo è chiamato dal metodo OnPostExecute() di un AsyncTask. Sono un po 'confuso sulla parte PendingIntent, ad essere onesto. Qualsiasi chiarimento su ciò che sospetto sia un codice erroneo sarebbe molto apprezzato.

risposta

4

Ho creato la classe per mostrare le notifiche:

public class NotificationData { 

    public static NotificationManager mNotificationManager; 
    public static int SIMPLE_NOTFICATION_ID; 
    private Context _context; 

    public NotificationData(Context context) { 
     _context = context; 
    } 

    public void clearNotification() { 
     mNotificationManager.cancel(SIMPLE_NOTFICATION_ID); 
    } 

    public void SetNotification(int drawable, String msg, String action_string, Class cls) { 
     mNotificationManager = (NotificationManager) _context.getSystemService(Context.NOTIFICATION_SERVICE); 
     final Notification notifyDetails = new Notification(drawable, "Post Timer", System.currentTimeMillis()); 
     long[] vibrate = { 100, 100, 200, 300 }; 
     notifyDetails.vibrate = vibrate; 
     notifyDetails.ledARGB = 0xff00ff00; 
     notifyDetails.ledOnMS = 300; 
     notifyDetails.ledOffMS = 1000; 
    // notifyDetails.number=4; 
     notifyDetails.defaults =Notification.DEFAULT_ALL; 
     Context context = _context; 
     CharSequence contentTitle = msg; 
     CharSequence contentText = action_string;  
     Intent notifyIntent = new Intent(context, cls); 
    // Bundle bundle = new Bundle(); 
    // bundle.putBoolean(AppConfig.IS_NOTIFICATION, true); 
     notifyIntent.putExtras(bundle); 
     PendingIntent intent = PendingIntent.getActivity(_context, 0,notifyIntent, android.content.Intent.FLAG_ACTIVITY_NEW_TASK); 
     notifyDetails.setLatestEventInfo(context, contentTitle, contentText, intent); 
     mNotificationManager.notify(SIMPLE_NOTFICATION_ID, notifyDetails);   
    } 
} 

Come usare questa classe:

NotificationData notification; //create object 
notification = new NotificationData(this); 
notification.SetNotification(R.drawable.notification, "Notification Title", "Click to open", YourClassName.class); 

Aggiungi il permesso android.permission.VIBRATE

+0

Mi dispiace ma cos'è AppConfig? C'è una biblioteca che devo includere per usarlo? Eclipse sembra non saperlo se c'è così dovrei aggiungerlo al mio percorso di build. – Carnivoris

+0

Appconfig è una classe e IS_NOTIFICATION è un membro statico che è possibile eliminare questa riga Bundle bundle = new Bundle(); bundle.putBoolean (AppConfig.IS_NOTIFICATION, true); notifyIntent.putExtras (fascio); –

+0

Purtroppo non ricevo ancora alcuna notifica. Lo chiamo dal metodo onPostExecute() di una classe ASyncTask. Confermo che l'ASyncTask è completato da un messaggio in LogCat, ma non ricevo nessuna notifica inviata alla barra di notifica. – Carnivoris

2

Prova questo:

NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 

int icon = R.drawable.icon;  // icon from resources 
CharSequence tickerText = "Any thing";    // ticker-text 
long when = System.currentTimeMillis();   // notification time 
Context context21 = getApplicationContext();  // application Context 
CharSequence contentTitle = "Anything"; // expanded message title 
CharSequence contentText = (CharSequence) extras.get("message");  // expanded message text 

Intent notificationIntent = new Intent(this, MainStart.class); 
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0); 

// the next two lines initialize the Notification, using the configurations above 
Notification notification = new Notification(icon, tickerText, when); 
notification.defaults |= Notification.DEFAULT_VIBRATE; 
notification.defaults |= Notification.DEFAULT_LIGHTS; 
notification.defaults |= Notification.DEFAULT_SOUND; 
notification.flags |= Notification.FLAG_AUTO_CANCEL; 
/* long[] vibrate = { 0, 100, 200, 300 }; 
notification.vibrate = vibrate; 
notification.ledARGB = Color.RED; 
notification.ledOffMS = 300; 
notification.ledOnMS = 300;*/ 
notification.setLatestEventInfo(context21, contentTitle, contentText, contentIntent); 
mNotificationManager.notify(Constants.NOTIFICATION_ID, notification); 
+0

Mi sto imbattendo in problemi simili con questo come ho fatto prima. Intent notificationIntent = new Intent (this, CastrRecorder.class); Tale riga viene contrassegnata da Eclipse e l'unica risoluzione è rimuovere gli argomenti. Inoltre, questo viene chiamato all'interno di una classe che estende ASyncTask e getActivity() non funziona. – Carnivoris

2

Un'altra cosa da provare è quello di assicurarsi che il proprio manifesto contiene

<permission android:name="android.permission.STATUS_BAR_SERVICE" android:protectionLevel="signature" /> 

anche la mia sembrava ignorare le notifiche successive con lo stesso NOTIFICATION_ID.

30

Anche se il problema è risolto, mi limiterò a postare come ho risolto il mio problema che la notifica non stava mostrando, forse potrebbe aiutare altre persone a leggere le risposte:

nel mio palazzo notifica mi mancava il icona. Non appena ho aggiunto qualcosa come setSmallIcon(R.drawable.ic_launcher) è stata mostrata la notifica.

+0

ottenuto lo stesso identico problema .. risolto, grazie! – akhyar

+0

Sì, ha funzionato anche per me. La prima volta che lavoro con le notifiche.Grazie molto! –

+0

Esattamente! Molte grazie! – Alexandr

0

Per me questo continuava ad accadere e non avevo idea del perché, ma il problema era che l'icona che avevo impostato era troppo grande, quindi mi stava dando qualche errore casuale.