尽管创建了频道,但在Android O中未显示通知

前端之家收集整理的这篇文章主要介绍了尽管创建了频道,但在Android O中未显示通知前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这是我在下面给出的代码.尽管创建了通知频道,但无法在 Android O上创建任何通知.
private void weatherNotification(WeatherInfo weather) {
    Intent intent = new Intent(this,WeatherActivity.class);
    PendingIntent pendingIntent = PendingIntent.getActivity(this,intent,0);

    String temperatureScale = prefs.getUnits().equals("metric") ? getString(R.string.c) : getString(R.string.f);
    String speedScale = prefs.getUnits().equals("metric") ? getString(R.string.mps) : getString(R.string.mph);

    String temperature = getString(R.string.temperature,weather.getMain().getTemp(),temperatureScale);
    String city = getString(R.string.city,weather.getName() + "," + weather.getSys().getCountry());
    String wind = getString(R.string.wind_,weather.getWind().getSpeed(),speedScale);
    String humidity = getString(R.string.humidity,weather.getMain().getHumidity());
    String pressure = getString(R.string.pressure,weather.getMain().getPressure());

    String data = city + "\n" + temperature + "\n" + wind + "\n" + humidity + "\n" + pressure;

    NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        String id = "w01",name = getString(R.string.weather_notification_title);
        int importance = NotificationManager.IMPORTANCE_DEFAULT;
        String desc = getString(R.string.weather_notification_description);

        NotificationChannel channel = new NotificationChannel(id,name,importance);
        channel.setDescription(desc);
        notificationManager.createNotificationChannel(channel);
    }
    Notification.Builder builder = new Notification.Builder(this);

    builder.setAutoCancel(false);
    builder.setContentTitle("Weather Notification");
    builder.setContentText(Math.round(weather.getMain().getTemp()) + temperatureScale + " at " + weather.getName());
    builder.setStyle(new Notification.BigTextStyle().bigText(data));
    builder.setSmallIcon(R.drawable.ic_notification_icon);
    builder.setContentIntent(pendingIntent);
    if (Build.VERSION.SDK_INT >= 24)
        builder.setColor(Color.parseColor("#ff0000"));
    Notification notification = builder.build();
    notificationManager.notify(0,notification);
}

我相信我已经按照在Android O上创建通知所需的所有步骤 – 使用通知管理器创建通知通道,然后在此管理器上构建通知.我不知道我哪里出错了.

编辑1:在weatherNotification()方法中进行了以下更改,仍然不起作用:

private void weatherNotification(WeatherInfo weather) {

    ....

    NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        String id = "w01",importance);
        channel.setDescription(desc);
        notificationManager.createNotificationChannel(channel);
        builder = new Notification.Builder(this,id);
    }
    builder = new Notification.Builder(this);
    builder.setAutoCancel(false);
    builder.setContentTitle("Weather Notification");
    builder.setContentText(Math.round(weather.getMain().getTemp()) + temperatureScale + " at " + weather.getName());
    builder.setStyle(new Notification.BigTextStyle().bigText(data));
    builder.setSmallIcon(R.drawable.ic_notification_icon);
    builder.setContentIntent(pendingIntent);
    if (Build.VERSION.SDK_INT >= 24)
        builder.setColor(Color.parseColor("#ff0000"));
    Notification notification = builder.build();
    notificationManager.notify(0,notification);
    ....
}

编辑2:从编辑1代码,我发现生成器再次被重新生成.所以我再次做了以下更改:

private void weatherNotification(WeatherInfo weather) {
    ....
    NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        String id = "w01",id);
    }
    else
        builder = new Notification.Builder(this);
    ....
}

解决方法

您应该在此行上收到弃用警告:
Notification.Builder builder = new Notification.Builder(this);

这是因为新构造函数采用您的通道ID:

Notification.Builder builder = new Notification.Builder(this,id);

(虽然你需要重新编写代码,以便id仍可用.

引用the JavaDocs for the constructor that you are using right now:“所有发布的通知都必须指定NotificationChannel ID.”就目前而言,在提出通知时您没有使用该频道. AFAIK,会阻止您的通知显示.

猜你在找的Android相关文章