2013-03-26 6 views
33

Ho un problema. Alcune volte il mio servizio è chiuso con forza questo logcat:Notifica errata pubblicata dal pacchetto Impossibile espandere RemoteViews

03-26 20:44:44.849: E/AndroidRuntime(12080): FATAL EXCEPTION: main 
03-26 20:44:44.849: E/AndroidRuntime(12080): android.app.RemoteServiceException: Bad notification posted from package by.flipdev.vkspy: Couldn't expand RemoteViews for: StatusBarNotification(pkg=by.flipdev.vkspy id=1 tag=null score=0 notn=Notification(pri=0 contentView=by.flipdev.vkspy/0x1090071 vibrate=null sound=null defaults=0x0 flags=0x2 kind=[null])) 
03-26 20:44:44.849: E/AndroidRuntime(12080): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1374) 
03-26 20:44:44.849: E/AndroidRuntime(12080): at android.os.Handler.dispatchMessage(Handler.java:99) 
03-26 20:44:44.849: E/AndroidRuntime(12080): at android.os.Looper.loop(Looper.java:137) 
03-26 20:44:44.849: E/AndroidRuntime(12080): at android.app.ActivityThread.main(ActivityThread.java:4931) 
03-26 20:44:44.849: E/AndroidRuntime(12080): at java.lang.reflect.Method.invokeNative(Native Method) 
03-26 20:44:44.849: E/AndroidRuntime(12080): at java.lang.reflect.Method.invoke(Method.java:511) 
03-26 20:44:44.849: E/AndroidRuntime(12080): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791) 
03-26 20:44:44.849: E/AndroidRuntime(12080): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:558) 
03-26 20:44:44.849: E/AndroidRuntime(12080): at dalvik.system.NativeStart.main(Native Method) 

questo è il mio codice per aggiungere aggiungere le notifiche:

protected void addNotification(final Bitmap Avatar, 
     final int small_Image_ID, final int notify_id, final String text, 
     final String title, final Boolean ongoing, final Boolean ticker, 
     final String tickerText, final Boolean autoCancel, 
     final String notificationCategory, final int notificationValue) { 

    try { 

     final Intent notificationIntent = new Intent(
       getApplicationContext(), CheckerActivity.class); 

     notificationIntent 
       .putExtra(notificationCategory, notificationValue); 
     notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP 
       | Intent.FLAG_ACTIVITY_SINGLE_TOP); 

     final PendingIntent contentIntent = PendingIntent.getActivity(
       getApplicationContext(), notify_id, notificationIntent, 
       PendingIntent.FLAG_UPDATE_CURRENT); 

     final NotificationManager nm = (NotificationManager) context 
       .getSystemService(Context.NOTIFICATION_SERVICE); 


     final NotificationCompat.Builder builder = new NotificationCompat.Builder(
       context); 
     if (Ticker) { 
      builder.setContentIntent(contentIntent) 
        .setSmallIcon(small_Image_ID) 
        .setOngoing(ongoing)      
        .setLargeIcon(Avatar).setTicker(tickerText)      
        .setWhen(System.currentTimeMillis()) 
        .setAutoCancel(AutoCancel).setContentTitle(title) 
        .setContentText(text); // Текст уведомления 
     } else { 
      builder.setContentIntent(contentIntent) 
        .setSmallIcon(small_Image_ID) 
        .setLargeIcon(avatar)      
        .setOngoing(ongoing) 
        .setWhen(System.currentTimeMillis()) 
        .setAutoCancel(AutoCancel).setContentTitle(title) 
        .setContentText(text); // Текст уведомления 
     } 

     final Notification n = builder.getNotification(); 

     nm.notify(notify_id, n); 

    } catch (final Exception e) { 
        // TODO: add exception handling code 
    } 
} 

Perché il mio servizio ucciso?

+0

Non so cosa c'è che non va, ma forse in relazione alla bitmap del tuo avatar? È mai nullo? –

+1

Puoi verificare il tuo codice se l'immagine Avatar non è nulla?
Per small_Image_ID dove si assegna il valore?
Se il gestore delle notifiche non riesce a trovare una risorsa, attiva quel tipo di messaggio: Notifica errata pubblicata XXXX.
Quindi la prima cosa da verificare è che tutto il valore esiste.
Thx – Sistr

+0

Direi che l'avatar è null o small_Image_ID non si riferisce a un drawable. – njzk2

risposta

5

Questo problema è il risultato di risorse mancanti o nulle. Guardando il tuo codice, deduco che, possibile errore sembra essere su Ticker (sempre falso) e setLargeIcon(avatar)(avatar è sempre nullo).

Potresti postare tutte le implementazioni del servizio?

P.S. Si prega di provare a rispettare la convenzione di denominazione di Java; Ticker, Avatar, AutoCancel e altri oggetti dovrebbero iniziare con lettere minuscole.

6

Ho notato che questo accade sugli emulatori 3.0 quando ho impostato l'icona grande.

Quindi, poiché l'icona grande viene utilizzata solo dai dispositivi 4.0+, ho risolto questo problema controllando se la versione di creazione è> 13. Se è così (e solo se così), ho impostato l'icona Grande.

Il problema è andato.

+0

Molto utile! Infatti, 'builder.setLargeIcon()' si blocca sul livello API 12 (almeno l'emulatore). (Non sono mai stato in grado di testare gli emulatori di livello 13-14 poiché richiedono più di un'ora per avviarsi, quindi si bloccano prima che siano pronti a fare qualsiasi cosa.) In precedenza ho trovato che 'builder.setNumber()' si blocca anche sull'emulatore API level 12. – Jerry101

+0

Beh, niente di cui preoccuparsi più.Secondo la [Dashboard] (https://developer.android.com/about/dashboards/index.html) i dispositivi 3.x ora sono ** meno dello 0,1% ** del mercato globale, quindi non anche essere più elencato. Ad ogni modo, questo è il motivo per cui l'ho impostato solo sui dispositivi> 13 ('if (Build.VERSION.SDK_INT> 13) {...}'). –

+0

@Rotwang, sto ottenendo questa eccezione nella versione 4.4.2. Non in grado di rintracciarlo. – Tasneem

1

Beh, nel mio caso, stavo ottenendo esattamente lo stesso errore perché ho fatto riferimento a una definizione di stile per un TextView nel mio layout di notifica personalizzato che aveva una voce per un metodo di destinazione onClick. In particolare:

<item name="android:onClick">onClick</item> 

Una volta rimossa la linea, il problema è andato via. Una svista da parte mia, ma un buon promemoria per non riutilizzare ciecamente gli stili.

Problemi correlati