2013-03-26 19 views
33

Bir sorunum var. Bazen benim hizmet zorla bu LogCat ile kapatılır:Paketinden gönderilen hatalı bildirim RemoteViews genişletilemedi

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

neden hizmet öldürüldü:

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) 

Bu benim kod bildirimleri eklemek eklemek edilir?

+0

Neyin yanlış olduğunu bilmiyorum, ancak belki de avatar bitmap'inizle ilgili olabilir? Hiç boş mu? –

+1

Avatar görüntüsü null değilse, kodunuzu kontrol edebilir misiniz?
small_Image_ID için değeri atar mısınız?
Bildirim yöneticisi bir ressource bulamıyorsa, bu tür bir iletiyi tetikler: Kötü bildirim XXXX yayınladı.
Dolayısıyla, kontrol edilecek ilk şey, tüm değerin mevcut olmasıdır.
Thx – Sistr

+0

ı söyleyebilirim ya avatar boş veya small_Image_ID bir çekilebilir ifade etmez. arasında – njzk2

cevap

5

Bu sorun, eksik veya boş kaynakların bir sonucudur. Kodunuza bakarak, olası hata Ticker (her zaman yanlış) ve setLargeIcon(avatar)(avatar her zaman sıfırdır) üzerinde görünüyor.

tüm servis uygulamaları gönderir misiniz?

P.S. Lütfen java'nın adlandırma kurallarına saygı göstermeye çalışın; Ticker, Avatar, AutoCancel ve diğer nesneler küçük harfle başlamalıdır.

6

Büyük Simgeyi ayarladığımda, bu olayın 3.0 emülatörlerinde olduğunu farkettim.

Bu nedenle, Büyük Simge yalnızca 4.0+ aygıtları tarafından kullanıldığı için, Yapı sürümünün> 13 olup olmadığını kontrol ederek bu sorunu çözdüm. Eğer öyleyse (ve sadece öyleyse), Büyük simgesini ayarlıyorum.

sorun gitti. Ben bir onClick hedef yöntemi için bir giriş vardı benim özel bildirim düzeni bir TextView için bir stil tanımına atıfta çünkü

+0

Çok yardımcı! Gerçekten de, builder.setLargeIcon(), API seviyesi 12'de (en azından emülatör) çöküyor. (13-14 emülatörünü test edemedim çünkü bir saatten fazla sürüyorlar, daha sonra bir şey yapmaya hazır olmadan çarpıyorlar.) Daha önce builder.setNumber() işlevini kullandım. API düzey 12 emülatöründe de çöker. – Jerry101

+0

Artık endişelenecek bir şey yok.[Dashboard] 'a göre (https://developer.android.com/about/dashboards/index.html) 3.x cihazlar artık küresel pazarın% 0,1 **' sinden azdır. artık listeleniyor bile. Her neyse, bu yüzden bunu sadece cihazlarda> 13 ('if (Build.VERSION.SDK_INT> 13) {...}') olarak ayarlıyorum. –

+0

@Rotwang, Bu istisnayı 4.4.2 sürümünde alıyorum. İzleyemiyorum. – Tasneem

1

Eh, benim durumumda, bu tam aynı hatayı alıyordum. Spesifik olarak: Bu satırı çıkardıktan sonra sorun ortadan kalkmıştır. Benim açımdan bir gözetim, ama stilleri körü körüne yeniden kullanmamak için iyi bir hatırlatma.

İlgili konular