Spa*_*r0i 8 android android-notifications android-8.0-oreo
这是我在下面给出的代码.尽管创建了通知频道,但无法在Android O上创建任何通知.
private void weatherNotification(WeatherInfo weather) {
Intent intent = new Intent(this, WeatherActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, 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);
}
Run Code Online (Sandbox Code Playgroud)
我相信我已经遵循了在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", 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);
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);
....
}
Run Code Online (Sandbox Code Playgroud)
编辑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", 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);
builder = new Notification.Builder(this , id);
}
else
builder = new Notification.Builder(this);
....
}
Run Code Online (Sandbox Code Playgroud)
您应该在此行上收到弃用警告:
Notification.Builder builder = new Notification.Builder(this);
Run Code Online (Sandbox Code Playgroud)
那是因为新构造函数采用您的通道ID:
Notification.Builder builder = new Notification.Builder(this, id);
Run Code Online (Sandbox Code Playgroud)
(尽管您需要稍微重新编写代码,以便id仍然可用.
为您正在使用的构造函数引用JavaDocs:"所有发布的通知都必须指定NotificationChannel Id." 就目前而言,你提升时并没有使用那个频道Notification.AFAIK,会阻止您Notification显示.
| 归档时间: |
|
| 查看次数: |
4114 次 |
| 最近记录: |