Невозможно получать локальные уведомления Android - PullRequest
0 голосов
/ 17 ноября 2018

Я новичок в программировании на Android и пытаюсь создать свое первое приложение.Прямо сейчас я хочу отправлять локальные уведомления.К сожалению, я не могу получать уведомления на устройствах с API 28 и выше.Я знаю, что с тех пор, как Oreo и я добавили код, создающий канал, произошли изменения в способе отправки уведомлений.Похоже, если я запускаю приложение на симуляторе с более низким API (например, 19), уведомление получено.Также, если я копирую свой код в новый проект, я получаю уведомления даже на симуляторе под управлением Android Oreo.Какие настройки в проекте могут привести к тому, что уведомления не будут получены на Android Oreo?(В Logcat нет ошибок)

Мой код для отправки уведомлений:

public static final String CHANNEL_1_ID = "channel1";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    createNotificationChannels();
}

public void setNotif(View view) {
    Notification notification = new NotificationCompat.Builder(this, CHANNEL_1_ID)
            .setSmallIcon(R.mipmap.ic_launcher)
            .setContentTitle("hey")
            .setContentText("world")
            .setPriority(NotificationCompat.PRIORITY_HIGH)
            .build();
    NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this);
    notificationManager.notify(1, notification);
}

private void createNotificationChannels() {
    // if higher than android oreo
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {

        NotificationChannel channel1 = new NotificationChannel(CHANNEL_1_ID, "Channel 1", NotificationManager.IMPORTANCE_HIGH);
        channel1.setDescription("This is channel 1");

        NotificationManager manager = getSystemService(NotificationManager.class);
        manager.createNotificationChannel(channel1);
    }
}

Метод setNotif вызывается нажатием кнопки.Опять же, я новичок в программировании Android, поэтому любые советы будут полезны.Возможно даже другой способ, которым я мог диагностировать проблему.Спасибо!

1 Ответ

0 голосов
/ 17 ноября 2018

Добавьте эту проверку в ваш setNotif() метод:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)  
  notificationManager.createNotificationChannel(getNotificationChannel(context));

setNotif() метод будет изменен следующим образом:

public void setNotif(View view) {
    Notification notification = new NotificationCompat.Builder(this, CHANNEL_1_ID)
            .setSmallIcon(R.mipmap.ic_launcher)
            .setContentTitle("hey")
            .setContentText("world")
            .setPriority(NotificationCompat.PRIORITY_HIGH)
            .build();
    NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)        notificationManager.createNotificationChannel(getNotificationChannel(context));
    notificationManager.notify(1, notification);
}

И метод getNotificationChannel () будет выглядеть следующим образом:

private static NotificationChannel getNotificationChannel(Context context) {
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O)
            return null;
        CharSequence name = context.getString(R.string.app_name);// The user-visible name of the channel.
        int importance = android.app.NotificationManager.IMPORTANCE_HIGH;
        NotificationChannel notificationChannel = new NotificationChannel(BuildConfig.APPLICATION_ID, name, importance);
        notificationChannel.setShowBadge(true);
        return notificationChannel;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...