не в состоянии использовать setChannelId в Android 5.0 и выше - PullRequest
0 голосов
/ 04 октября 2018

Я пытаюсь настроить setChannelId и добавить действие в самом уведомлении, чтобы остановить синхронизацию данных

Ниже приведен мой код

        return new android.support.v4.app.NotificationCompat.Builder(context)
                .addAction(R.drawable.icon, "STOP SYNC", stopServiceIntent)
                .setChannelId(SHEALTH_NOTIFICATION_CHANNEL_ID)
                .setContentTitle(r.getString(R.string.shealth_notification_title))
                .setContentText(r.getString(R.string.shealth_notification_text))
                .setSmallIcon(R.mipmap.ic_launcher)
                .build();

Ошибка, которую я получаю,

не удается разрешить метод "setChannelId"

Если я изменяю свой код, используйте Notification только вместо NotificationCompat, тогда я получаю следующую ошибку

Для вызова требуется API уровня 26 (текущий минимум 21)

 return new android.support.v7.app.Notification.Builder(context)
                    .addAction(R.drawable.icon, "STOP SYNC", stopServiceIntent)
                    .setChannelId(SHEALTH_NOTIFICATION_CHANNEL_ID)
                    .setContentTitle(r.getString(R.string.shealth_notification_title))
                    .setContentText(r.getString(R.string.shealth_notification_text))
                    .setSmallIcon(R.mipmap.ic_launcher)
                    .build();

, но я хочу разрешить моему приложению работать на Android 5.0 и выше, поэтому я не могу установить min sdk на APIУровень 26

Ниже приведены мои настройки, связанные с SDK в build.gradle

  1. minSdkVersion 21
  2. targetSdkVersion 28

я не являюсьпокажи, как я смогу написать такой код, который поддерживает 5.0 и выше с идентификатором канала

Ответы [ 3 ]

0 голосов
/ 04 октября 2018

Вы должны использовать класс NotificationCompat для создания уведомлений, если вы поддерживаете более старые версии Android:

return new NotificationCompat.Builder(context, SHEALTH_NOTIFICATION_CHANNEL_ID)
    // set every other field

Этот класс сравнения добавит канал уведомлений для устройств Oreo и выше и проигнорирует его для Nougat.и ниже.

0 голосов
/ 04 октября 2018

Нет необходимости устанавливать ChannelId для версий ниже 26 API (Android O).Вы можете проверить свою версию во время выполнения, если хотите поддерживать оба случая.

if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                    return new android.support.v7.app.Notification.Builder(context)
                            .addAction(R.drawable.icon, "STOP SYNC", stopServiceIntent)
                            .setChannelId(SHEALTH_NOTIFICATION_CHANNEL_ID)
                            .setContentTitle(r.getString(R.string.shealth_notification_title))
                            .setContentText(r.getString(R.string.shealth_notification_text))
                            .setSmallIcon(R.mipmap.ic_launcher)
                            .build();
                }
                else {
                    return new android.support.v7.app.Notification.Builder(context)
                            .addAction(R.drawable.icon, "STOP SYNC", stopServiceIntent)
                            .setContentTitle(r.getString(R.string.shealth_notification_title))
                            .setContentText(r.getString(R.string.shealth_notification_text))
                            .setSmallIcon(R.mipmap.ic_launcher)
                            .build();
                }

Или Вы можете использовать класс NotificationCompat из библиотеки поддержки lib для поддержки более старых версий без проверки версии самостоятельно.

NotificationCompat.Builder(context, SHEALTH_NOTIFICATION_CHANNEL_ID)
0 голосов
/ 04 октября 2018

Попробуй, у меня все заработало.

public void showNotification() {
    NotificationManager notificationManager =
            (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    int notificationId = 1;
    String channelId = "channel-01";
    String channelName = "Channel Name";
    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
        int importance = NotificationManager.IMPORTANCE_HIGH;
        NotificationChannel mChannel = new NotificationChannel(channelId, channelName, importance);
        assert notificationManager != null;
        notificationManager.createNotificationChannel(mChannel);
    }
    NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this, channelId)
            .setSmallIcon(R.mipmap.ic_launcher)
            .setContentTitle("Test Notofication")
            .setContentText("Testing Okay");

    TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
    Intent intent = new Intent(this, MainActivity.class);
    stackBuilder.addNextIntent(intent);
    PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(0,PendingIntent.FLAG_UPDATE_CURRENT);
    mBuilder.setContentIntent(resultPendingIntent);

    assert notificationManager != null;
    notificationManager.notify(notificationId, mBuilder.build());
}
...