Пользовательский лоток уведомлений не работает для некоторых телефонов

Я работаю над приложением, которое отправляет push-уведомление от устройства к устройству. Я создал пользовательский макет уведомления, который имеет заголовок, сообщение и две кнопки (Принять и Отклонить). Когда устройство B получает уведомление от устройства A, для некоторых телефонов оно работает отлично, но в некоторых телефонах в панели уведомлений не отображаются заголовок, сообщение и кнопки. Это просто показывает пустой лоток уведомлений. Это не ошибка, но пользовательский макет не загружается для некоторых телефонов. Он отлично работает в Moto G5s plus (Android 7.1.1), но не работает для RedMi Note 5 Pro, того же уровня API (Android 7.1.1). Кто-нибудь может мне с этим помочь?

@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
    Map<String, String> remoteMessageData = remoteMessage.getData();

    String remoteMessageType = remoteMessageData.get("type");


        String message = remoteMessageData.get("message") + ". Please Confirm?";
        String profilePhoto = remoteMessageData.get("profile_photo");
        String notificationUID = remoteMessageData.get("notification_uid");
        String userUID = remoteMessageData.get("user_uid");

        RemoteViews remoteViews = new RemoteViews(getPackageName(), R.layout.layout_custom_notification);

        remoteViews.setTextViewText(R.id.textNotificationMessage, message);

        remoteViews.setImageViewBitmap(R.id.eIntercomProfilePic, getBitmapFromURL(profilePhoto));

        Notification notification = new NotificationCompat.Builder(this, getString(R.string.default_notification_channel_id))
                .setSmallIcon(R.drawable.namma_apartment_notification)
                .setAutoCancel(true)
                .setCustomBigContentView(remoteViews)
                .setSound(RingtoneManager.getDefaultUri(Notification.DEFAULT_SOUND))
                .setPriority(PRIORITY_DEFAULT)
                .build();

        int mNotificationID = (int) System.currentTimeMillis();

        Intent acceptButtonIntent = new Intent("accept_button_clicked");
        acceptButtonIntent.putExtra("Notification_Id", mNotificationID);
        acceptButtonIntent.putExtra("Notification_UID", notificationUID);
        acceptButtonIntent.putExtra("User_UID", userUID);
        PendingIntent acceptPendingIntent = PendingIntent.getBroadcast(this, 123, acceptButtonIntent, PendingIntent.FLAG_UPDATE_CURRENT);
        remoteViews.setOnClickPendingIntent(R.id.buttonAccept, acceptPendingIntent);

        Intent rejectButtonIntent = new Intent("reject_button_clicked");
        rejectButtonIntent.putExtra("Notification_UID", notificationUID);
        rejectButtonIntent.putExtra("Notification_Id", mNotificationID);
        rejectButtonIntent.putExtra("User_UID", userUID);
        PendingIntent rejectPendingIntent = PendingIntent.getBroadcast(this, 123, rejectButtonIntent, PendingIntent.FLAG_UPDATE_CURRENT);
        remoteViews.setOnClickPendingIntent(R.id.buttonReject, rejectPendingIntent);

        NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

    /*To support Android Oreo Devices and higher*/
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
            NotificationChannel mChannel = new NotificationChannel(
                    getString(R.string.default_notification_channel_id), "Namma Apartments Channel", NotificationManager.IMPORTANCE_HIGH);
            Objects.requireNonNull(notificationManager).createNotificationChannel(mChannel);
        }
}

1 ответ

Я думаю, что вы говорите о версии Oreo или выше. Oreo не может поддерживать уведомления для уведомления, вам нужно создать канал для этого, как показано ниже:

 private void sendMyNotification(String message,String title) {
        NotificationManager notificationManager =
                (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        Intent intent = new Intent(this, MainActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP);
        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_ONE_SHOT);
        Uri soundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);

        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
            @SuppressLint("WrongConstant")
            NotificationChannel notificationChannel=new NotificationChannel("my_notification","n_channel",NotificationManager.IMPORTANCE_MAX);
            notificationChannel.setDescription("description");
            notificationChannel.setName("Channel Name");
            notificationManager.createNotificationChannel(notificationChannel);
        }
            NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
                    .setSmallIcon(R.drawable.listlogo)
                    .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.tlogo))
                    .setContentTitle(title)
                    .setContentText(message)
                    .setAutoCancel(true)
                    .setSound(soundUri)
                    .setContentIntent(pendingIntent)
                    .setDefaults(Notification.DEFAULT_ALL)
                    .setPriority(NotificationManager.IMPORTANCE_MAX)
                    .setOnlyAlertOnce(true)
                    .setChannelId("my_notification")
                    .setColor(Color.parseColor("#3F5996"));
            //.setProgress(100,50,false);
            notificationManager.notify(0, notificationBuilder.build());
    }