J'ai une étrange erreur avec le gestionnaire de notifications.
@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
Message d'erreur:
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)
Est-ce à dire que les icônes auxquelles j'essaie d'accéder n'existent pas? Je ne sais pas comment interpréter cette erreur et la recherche de ce message d'erreur ne donne rien.
En fait, vous ne définissez pas d'icône pour la notification Push. Ajoutez .setSmallIcon(R.drawable.your_icon)
à votre notification.
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);
Vous n'avez pas appelé setSmallIcon()
sur le NotificationCompat.Builder
. Cela fournit l'icône qui ira dans la barre d'état pendant que Notification
est actif.
Selon le Android NotificationManager Code source
if (mContext.getApplicationInfo().targetSdkVersion > Build.VERSION_CODES.Lollipop_MR1) {
if (notification.getSmallIcon() == null) {
throw new IllegalArgumentException("Invalid notification (no valid small icon): "
+ notification);
}
}
Cette erreur ne s'est produite que lorsque vous définissez l'API cible> Lollipop_MR1 (22) et que la notification n'a pas de petite icône.
Cela a soudainement commencé à arriver à ma demande. Après quelques recherches, j'ai trouvé que ce changement dans mon fichier manifeste commençait réellement à le provoquer.
de:
<uses-sdk Android:minSdkVersion="21" />
à:
<uses-sdk Android:minSdkVersion="21" Android:targetSdkVersion="28" />
J'ai vu quelque part que quelqu'un a noté qu'il ne vérifie l'icône que si la version cible du SDK est définie. Effectivement, dans la source, il y a ceci:
if (mContext.getApplicationInfo().targetSdkVersion > Build.VERSION_CODES.Lollipop_MR1) {
if (notification.getSmallIcon() == null) {
throw new IllegalArgumentException("Invalid notification (no valid small icon): "
+ notification);
}
}
Heureusement, la solution était simple, il suffit de définir l'icône dans le manifeste:
<application Android:label="MyApp" Android:icon="@mipmap/icon" >