Android 9 Api 28通知未显示

时间:2019-05-27 09:45:30

标签: java android push-notification notifications android-notifications

我正在尝试显示通知,但不适用于Oreo和Pie版本。

它正在使用kitkat版本。

我尝试了所有可能的条件,我不知道这里还缺少什么

这是我的代码:

String idChannel = "my_channel_01";
        Intent mainIntent;
        mainIntent = new Intent(ChecklistOptionActivity.this, CashCountOptionActivity.class);

        PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, mainIntent, 0);

        NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);

        NotificationChannel mChannel = null;
        // The id of the channel.

        int importance = NotificationManager.IMPORTANCE_HIGH;

        NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
        builder.setContentTitle(context.getString(R.string.app_name))
                .setSmallIcon(R.drawable.bc_icon)
                .setContentIntent(pendingIntent)
                .setContentText("Test");

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            mChannel = new NotificationChannel(idChannel, context.getString(R.string.app_name), importance);
            // Configure the notification channel.
            mChannel.setDescription("Test");
            mChannel.enableLights(true);
            mChannel.setLightColor(Color.RED);
            mChannel.setVibrationPattern(new long[]{100, 200, 300, 400, 500, 400, 300, 200, 400});
            mNotificationManager.createNotificationChannel(mChannel);
        } else {
            builder.setContentTitle(context.getString(R.string.app_name))
                    .setPriority(NotificationCompat.PRIORITY_HIGH)
                    .setColor(ContextCompat.getColor(context, R.color.colorBlue))
                    .setVibrate(new long[]{100, 250})
                    .setLights(Color.YELLOW, 500, 5000)
                    .setAutoCancel(true);
        }
        mNotificationManager.notify(1, builder.build());

1 个答案:

答案 0 :(得分:0)

String channel_id = createNotificationChannel(context); 

NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(context, channel_id);

下面的方法是生成一个新的channel_id。

 public static String createNotificationChannel(Context context) {

                // NotificationChannels are required for Notifications on O (API 26) and above.
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {

                    // The id of the channel.
                    String channelId = "Channel_id";

                    // The user-visible name of the channel.
                    CharSequence channelName = "Application_name";
                    // The user-visible description of the channel.
                    String channelDescription = "Application_name Alert";
                    int channelImportance = NotificationManager.IMPORTANCE_DEFAULT;
                    boolean channelEnableVibrate = true;
        //            int channelLockscreenVisibility = Notification.;

                    // Initializes NotificationChannel.
                    NotificationChannel notificationChannel = new NotificationChannel(channelId, channelName, channelImportance);
                    notificationChannel.setDescription(channelDescription);
                    notificationChannel.enableVibration(channelEnableVibrate);
        //            notificationChannel.setLockscreenVisibility(channelLockscreenVisibility);

                    // Adds NotificationChannel to system. Attempting to create an existing notification
                    // channel with its original values performs no operation, so it's safe to perform the
                    // below sequence.
                    NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
                    assert notificationManager != null;
                    notificationManager.createNotificationChannel(notificationChannel);

                    return channelId;
                } else {
                    // Returns null for pre-O (26) devices.
                    return null;
                }
            }
  • 在这里,您将在设备中使用channel_id收到推送通知,该设备包含26个以上的SDK版本。
  • 由于NotificationCompat.Builder(context)是一种已弃用的方法,现在您将使用一个更新的版本,该版本具有两个参数,一个是context,另一个是channel_id。
  • NotificationCompat.Builder(context, channel_id)更新了方法。试试吧。
  • 在设备的26+ SDK版本中,您每次都会创建channel_id。