Как создать Notification.contentView в Android Nougat и выше? - PullRequest
0 голосов
/ 30 августа 2018

Я использую Notification.contentView для репликации просмотров уведомлений:

View notificationView = notification.contentView.apply(context, parent);

К сожалению, начиная с версии N, Notification.contentView может быть нулевым и не рекомендуется, так как я могу создать Notification.contentView вручную?

Обычно я создаю уведомление следующим образом:

NotificationCompat.Builder builder = new NotificationCompat.Builder(this, NOTIFICATION_CHANNEL_ID);
builder.setAutoCancel(true)
        .setColor(ContextCompat.getColor(this, R.color.colorAccent))
        .setContentTitle(title)
        .setContentText(text)
        .setDefaults(Notification.DEFAULT_ALL)
        .setWhen(when)
        .setSmallIcon(smallIcon);

Тогда, если я создаю contentView вручную, что я могу сделать, чтобы отобразить все вышеперечисленные настройки?
Важное примечание: я не вызываю setCustomContentView, я хочу воспроизвести contentView для стандартного уведомления.

Ответы [ 2 ]

0 голосов
/ 09 сентября 2018

Ответь на мой вопрос:
Создать contentView с помощью Notification.Builder:

builder.createContentView();

Создать contentView с помощью Notification:

Notification.Builder.recoverBuilder(context, notification).createContentView();

Поскольку Notification.Builder.createContentView() был введен на уровне API 24, вышеупомянутый код может быть вызван только с Nougat 7.0 или более новых устройств; Для телефонов более ранних версий всегда безопасно ссылаться на ненулевой Notification.contentView напрямую, он автоматически создается системой Android после вызова builder.build ().

0 голосов
/ 30 августа 2018

Notification.contentView()

КОД ОБРАЗЦА

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

    String NOTIFICATION_CHANNEL_ID = "Nilesh_channel";

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        NotificationChannel notificationChannel = new NotificationChannel(NOTIFICATION_CHANNEL_ID, "Your Notifications",
                NotificationManager.IMPORTANCE_HIGH);

        notificationChannel.setDescription("");
        notificationChannel.enableLights(true);
        notificationChannel.enableVibration(true);
        mNotificationManager.createNotificationChannel(notificationChannel);
    }

    NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this, NOTIFICATION_CHANNEL_ID);

    RemoteViews notificationView = new RemoteViews(getPackageName(), R.layout.custom_layout);

    notificationBuilder.setAutoCancel(true)
            .setColor(ContextCompat.getColor(this, R.color.colorAccent))
            .setContentTitle(getString(R.string.app_name))
            .setContentText("")
            .setDefaults(Notification.DEFAULT_ALL)
            .setWhen(System.currentTimeMillis())
            .setSmallIcon(R.drawable.ic_launcher_background)
            .setCustomContentView(notificationView) // set here your RemoteViews
            .setAutoCancel(true);

OUTPUT

enter image description here

...