最近在使用通知的时候,发现方法执行后,没有弹出通知,而是提示下面的错误:
Developer warning for package "com.example.test" Failed to post notification on channel "null" See log for more details.
经上网查证,是在Android O后 引入了一个叫NotificationChannel的类, 我们在sdk版本为26的时候,如果不加这个东西,就不能发通知。
所以务必在26以及之后的版本中添加 channelId。
private void sendNotification() {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.baidu.com"));
PendingIntent pendingIntent = PendingIntent.getActivity(MainActivity.this,0,intent,0);
NotificationManager manager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
NotificationCompat.Builder builder = new NotificationCompat.Builder(MainActivity.this,"channel_1112");//一定要添加channelId,否则会报错Fail to post notification on channel "null"
builder.setSmallIcon(R.mipmap.ic_launcher); //此条件必须设置,不然不能显示
RemoteViews view = new RemoteViews(getPackageName(), R.layout.notify_custom_layout); //自定义布局
builder.setContent(view);
if(Build.VERSION.SDK_INT >= 26)
{
//当sdk版本大于26
String id = "channel_1112";
String description = "143";
int importance = NotificationManager.IMPORTANCE_LOW;
NotificationChannel channel = new NotificationChannel(id, description, importance);
channel.enableLights(true);
channel.enableVibration(true);
if (manager != null) {
manager.createNotificationChannel(channel);
}
manager.notify(1, builder.build());
/* //使用系统样式
Notification notification = new Notification.Builder(MainActivity.this, id)
.setCategory(Notification.CATEGORY_MESSAGE)
.setSmallIcon(R.mipmap.ic_launcher)
.setContentTitle("This is a content title")
.setContentText("This is a content text")
.setContentIntent(pendingIntent)
.setAutoCancel(true)
.setWhen(System.currentTimeMillis())
.setDefaults(Notification.DEFAULT_ALL)
.setPriority(Notification.PRIORITY_MAX)
.setFullScreenIntent(pendingIntent, true)
.build();
manager.notify(1, notification);*/
}
else
{
//当sdk版本小于26
Notification notification = new NotificationCompat.Builder(MainActivity.this)
.setContentTitle("This is content title")
.setContentText("This is content text")
.setContentIntent(pendingIntent)
.setSmallIcon(R.mipmap.ic_launcher)
.build();
manager.notify(1,notification);
}
}