这是我在下面给出的代码.尽管创建了通知频道,但无法在
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,会阻止您的通知显示.