2015-11-11 13 views
15

Ich habe einen seltsamen Fehler mit Benachrichtigungsmanager.Android NotificationManager gibt mir "kein gültiges kleines Symbol" Fehler

@Override 
public void onMessageReceived(String from, Bundle data) 
{ 
    Log.i(TAG, "IP : " + (String) data.get("ip")); 
    NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 
    Intent acceptNextIntent = new Intent(MainActivity.BROADCAST_KEY_ACCEPT); 
//  acceptNextIntent.putExtra("ip", (String) data.get("blah")); //add stuff here 
    PendingIntent acceptNextPendingIntent = PendingIntent.getBroadcast(this, 0, acceptNextIntent, 0); 

    Intent declineNextIntent = new Intent(MainActivity.BROADCAST_KEY_DECLINE); 
    PendingIntent declineNextPendingIntent = PendingIntent.getBroadcast(this, 0, declineNextIntent, 0); 

    NotificationCompat.Action acceptAction = new NotificationCompat.Action 
       .Builder(R.drawable.common_signin_btn_icon_disabled_focus_light, "Grant Request", acceptNextPendingIntent).build(); 

    NotificationCompat.Action declineAction = new NotificationCompat.Action 
       .Builder(R.drawable.common_signin_btn_icon_focus_dark, "Decline Request", declineNextPendingIntent).build(); 

    NotificationCompat.Builder notification = new NotificationCompat.Builder(this) 
       .setContentTitle("New Password Request From " + (String) data.get("ip")) 
       .addAction(acceptAction) 
       .addAction(declineAction); 

    notificationManager.notify(1, notification.build()); //ERROR HERE 

Fehlermeldung:

9.474 9327-9371/com.inh.amnesia_application I/MyGcmListenerService: IP : 128.239.213.39 
11-10 19:49:59.477 9327-9371/com.inh.amnesia_application E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1 
11-10 19:49:59.477 9327-9371/com.inh.amnesia_application E/AndroidRuntime: Process: com.inh.amnesia_application, PID: 9327 
11-10 19:49:59.477 9327-9371/com.inh.amnesia_application E/AndroidRuntime: java.lang.IllegalArgumentException: Invalid notification (no valid small icon): Notification(pri=0 contentView=com.inh.amnesia_application/0x1090085 vibrate=null sound=null defaults=0x0 flags=0x0 color=0x00000000 actions=2 vis=PRIVATE) 
11-10 19:49:59.477 9327-9371/com.inh.amnesia_application E/AndroidRuntime:  at android.app.NotificationManager.notify(NotificationManager.java:222) 
11-10 19:49:59.477 9327-9371/com.inh.amnesia_application E/AndroidRuntime:  at android.app.NotificationManager.notify(NotificationManager.java:194) 
11-10 19:49:59.477 9327-9371/com.inh.amnesia_application E/AndroidRuntime:  at com.inh.amnesia_application.MyGcmListenerService.onMessageReceived(MyGcmListenerService.java:65) 
11-10 19:49:59.477 9327-9371/com.inh.amnesia_application E/AndroidRuntime:  at com.google.android.gms.gcm.GcmListenerService.zzt(Unknown Source) 
11-10 19:49:59.477 9327-9371/com.inh.amnesia_application E/AndroidRuntime:  at com.google.android.gms.gcm.GcmListenerService.zzk(Unknown Source) 
11-10 19:49:59.477 9327-9371/com.inh.amnesia_application E/AndroidRuntime:  at com.google.android.gms.gcm.GcmListenerService.zza(Unknown Source) 
11-10 19:49:59.477 9327-9371/com.inh.amnesia_application E/AndroidRuntime:  at com.google.android.gms.gcm.GcmListenerService$1.run(Unknown Source) 
11-10 19:49:59.477 9327-9371/com.inh.amnesia_application E/AndroidRuntime:  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 
11-10 19:49:59.477 9327-9371/com.inh.amnesia_application E/AndroidRuntime:  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 
11-10 19:49:59.477 9327-9371/com.inh.amnesia_application E/AndroidRuntime:  at java.lang.Thread.run(Thread.java:818) 

Bedeutet dies, dass die Symbole ich Zugang versuche gar nicht existiert? Ich bin nicht sicher, wie man diesen Fehler interpretiert, und das Suchen dieser Fehlermeldung ergibt nichts.

Antwort

16

Sie setzen kein Symbol für die Push-Benachrichtigung. Fügen Sie Ihrer Benachrichtigung .setSmallIcon(R.drawable.your_icon) hinzu.

NotificationCompat.Builder notification = new NotificationCompat.Builder(this) 
      .setContentTitle("New Password Request From " + (String) data.get("ip")) 
      .setSmallIcon(R.drawable.your_icon) 
      .addAction(acceptAction) 
      .addAction(declineAction); 
+1

Ich habe die Quelle gefunden [code] (https://android.googlesource.com/platform/frameworks/base.git/+/master/core/java/android/app/NotificationManager.java#306), es scheint nur Ziel api> lolipop wird den Fehler haben. – einverne

+0

Ich bekomme diesen Fehler mit der Benachrichtigung, um die LEDs zu setzen, in diesem Fall sollte das Symbol irrelevant sein, da es nicht angezeigt wird ... – Michael

4

Nach dem Android NotificationManager Source Code

if (mContext.getApplicationInfo().targetSdkVersion > Build.VERSION_CODES.LOLLIPOP_MR1) { 
    if (notification.getSmallIcon() == null) { 
     throw new IllegalArgumentException("Invalid notification (no valid small icon): " 
       + notification); 
    } 
} 

Dieser Fehler nur geschehen, wenn Sie Ziel API gesetzt> LOLLIPOP_MR1 (22) und die Benachrichtigung nicht ein kleines Symbol hat.