On Android 8.1 API 27 notification does not display

后端 未结 4 1217
無奈伤痛
無奈伤痛 2020-11-27 03:51

I get Toast on Android 8.1 API 27:

Developer warning for package \"my_package_name\"
Failed to post notification on ...

L

4条回答
  •  夕颜
    夕颜 (楼主)
    2020-11-27 04:11

    If you get this error should be paid attention to 2 items and them order:

    1. NotificationChannel mChannel = new NotificationChannel(id, name, importance);
    2. builder = new NotificationCompat.Builder(context, id);

    Also NotificationManager notifManager and NotificationChannel mChannel are created only once.

    There are required setters for Notification:

    • builder.setContentTitle() // required
    • .setSmallIcon() // required
    • .setContentText() // required

    See example:

    private NotificationManager notifManager;
    public void createNotification(String aMessage, Context context) {
        final int NOTIFY_ID = 0; // ID of notification
        String id = context.getString(R.string.default_notification_channel_id); // default_channel_id
        String title = context.getString(R.string.default_notification_channel_title); // Default Channel
        Intent intent;
        PendingIntent pendingIntent;
        NotificationCompat.Builder builder;
        if (notifManager == null) {
            notifManager = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);
        }
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            int importance = NotificationManager.IMPORTANCE_HIGH;
            NotificationChannel mChannel = notifManager.getNotificationChannel(id);
            if (mChannel == null) {
                mChannel = new NotificationChannel(id, title, importance);
                mChannel.enableVibration(true);
                mChannel.setVibrationPattern(new long[]{100, 200, 300, 400, 500, 400, 300, 200, 400});
                notifManager.createNotificationChannel(mChannel);
            }
            builder = new NotificationCompat.Builder(context, id);
            intent = new Intent(context, MainActivity.class);
            intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
            pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);
            builder.setContentTitle(aMessage)                            // required
                   .setSmallIcon(android.R.drawable.ic_popup_reminder)   // required
                   .setContentText(context.getString(R.string.app_name)) // required
                   .setDefaults(Notification.DEFAULT_ALL)
                   .setAutoCancel(true)
                   .setContentIntent(pendingIntent)
                   .setTicker(aMessage)
                   .setVibrate(new long[]{100, 200, 300, 400, 500, 400, 300, 200, 400});
        }
        else {
            builder = new NotificationCompat.Builder(context, id);
            intent = new Intent(context, MainActivity.class);
            intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
            pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);
            builder.setContentTitle(aMessage)                            // required
                   .setSmallIcon(android.R.drawable.ic_popup_reminder)   // required
                   .setContentText(context.getString(R.string.app_name)) // required
                   .setDefaults(Notification.DEFAULT_ALL)
                   .setAutoCancel(true)
                   .setContentIntent(pendingIntent)
                   .setTicker(aMessage)
                   .setVibrate(new long[]{100, 200, 300, 400, 500, 400, 300, 200, 400})
                   .setPriority(Notification.PRIORITY_HIGH);
        }
        Notification notification = builder.build();
        notifManager.notify(NOTIFY_ID, notification);
    }
    

提交回复
热议问题