2013-03-26 12 views
33

Mam problem. Kilka razy moja usługa jest mocno zamknięte z tego LogCat:Złe powiadomienie wysłane z pakietu Nie można rozwinąć 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) 

To jest mój kod, aby dodać dodać Uwagi:

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 
    } 
} 

Dlaczego mój usługa zabity?

+0

Nie wiem, co jest nie tak, ale może związane z mapą bitową avatara? Czy jest on kiedykolwiek pusty? –

+1

Czy możesz sprawdzić kod, jeśli obraz Avatar nie ma wartości null?
Dla small_Image_ID gdzie przypisujesz wartość?
Jeśli menedżer powiadomień nie może znaleźć zasobu, uruchamia taki rodzaj komunikatu: Złe powiadomienie wysłane XXXX.
Pierwszą rzeczą do sprawdzenia jest to, że istnieje cała wartość.
Thx – Sistr

+0

Powiedziałbym, że albo awatar ma wartość null, albo small_Image_ID, nie odnosi się do losowania. – njzk2

Odpowiedz

5

Ten problem jest wynikiem brakujących lub zerowych zasobów. Patrząc na twój kod, wywnioskowałem, że możliwy błąd wydaje się być na Ticker (zawsze fałszywy) i setLargeIcon(avatar)(awatar jest zawsze pusty).

Czy możesz opublikować wszystkie swoje wdrożenia usług?

P.S. Staraj się przestrzegać konwencji nazewnictwa java; Ticker, Avatar, AutoCancel i inne obiekty powinny rozpoczynać się małymi literami.

6

Zauważyłem, że dzieje się to na emulatorach 3.0, kiedy ustawiam dużą ikonę.

Tak więc, ponieważ duża ikona jest używana tylko przez urządzenia 4.0+, rozwiązałem ten problem, sprawdzając, czy wersja kompilacji jest> 13. Jeśli tak (i ​​tylko jeśli tak), ustawię dużą ikonę.

Problem zniknął.

+0

Bardzo pomocny! Rzeczywiście, 'builder.setLargeIcon()' zawiesza się na poziomie API 12 (przynajmniej emulator). (Nigdy nie byłem w stanie przetestować na emulatorach poziomu 13-14, ponieważ zajęło im to większość czasu, zanim się uruchomili, a następnie ulegli awarii, zanim byli gotowi zrobić cokolwiek.) Poprzednio stwierdziłem, że 'builder.setNumber()' także zawiesza się na emulatorze poziomu API 12. – Jerry101

+0

Cóż, już się nie martwię.Według [Dashboard] (https://developer.android.com/about/dashboards/index.html) 3.x urządzenia są teraz ** mniejsze niż 0,1% ** globalnego rynku, więc nie będą być nawet na liście. W każdym razie, dlatego ustawiam go tylko na urządzeniach> 13 ('if (Build.VERSION.SDK_INT> 13) {...}'). –

+0

@Rotwang, otrzymuję ten wyjątek w wersji 4.4.2. Nie można tego wyśledzić. – Tasneem

1

Cóż, w moim przypadku otrzymałem dokładnie ten sam błąd, ponieważ odniosłem się do definicji stylu dla TextView w moim niestandardowym układzie powiadomień, który miał wpis dla metody docelowej onClick. W szczególności:

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

Po usunięciu tej linii problem zniknął. Przeoczenie z mojej strony, ale dobre przypomnienie, żeby nie ślepo ponownie używać stylów.

Powiązane problemy