android.app.RemoteServiceException: Bad notification for startForeground: java.lang.RuntimeException: invalid channel for service notification: Notification(channel=nyd003 pri=0 contentView=null vibrate=null sound=null defaults=0x0 flags=0x40 color=0x00000000 vis=PRIVATE)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2220)
at android.os.Handler.dispatchMessage(Handler.java:109)
at android.os.Looper.loop(Looper.java:166)
at android.app.ActivityThread.main(ActivityThread.java:7555)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:469)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:963)
注意:1、下边红色代码对应channelid,这两个参数值要一至,否则可能报如上错误.
2、getRandom的使用 notificationManager.notify(getRandom(),mBuilder.build());如果getRandom()的位置为0,则默认通知栏显示1条最新的消息,而使用getRandom(),则可以实现同时接收多条消息。
3,关于点击不同的通知,进入不同的界面,后边修改后再添加。
4,android8.0+可以显示Notification,为NotificationManager添加通道。如下边方法createNotificationChannel();
Intent intent = new Intent(mContext, WebViewActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(mContext, 0, intent,
PendingIntent.FLAG_UPDATE_CURRENT);//这里第二个参数可以用于后边根据不同的消息设置不同的点击事件
NotificationCompat.Builder mBuilder = null;
NotificationManager notificationManager = (NotificationManager) mContext.getSystemService(Service.NOTIFICATION_SERVICE);
if (Build.VERSION.SDK_INT >= 26) {
createNotificationChannel(notificationManager);
mBuilder = new NotificationCompat.Builder(mContext,"YOUR_CHANNEL_ID001");
} else {
mBuilder = new NotificationCompat.Builder(mContext);
}
mBuilder.setContentTitle("有未读消息")//设置通知栏标题
.setContentText(strMessage)//设置通知栏显示内容
// .setContent(contentViews)
// .setNumber(20)//设置通知集合的数量
.setTicker("通知来啦")//通知首次出现在通知栏,带上升动画效果的
.setWhen(System.currentTimeMillis())//通知产生的时间,会在通知信息里显示,一般是系统获取到的时间
.setPriority(Notification.PRIORITY_DEFAULT)//设置该通知优先级
.setAutoCancel(true)//设置这个标志当用户单击面板就可以让通知将自动取消
.setOngoing(false)//true,设置他为一个正在进行的通知
.setDefaults(Notification.DEFAULT_ALL)//向通知添加声音、闪灯和振动效果的最简单
;//设置通知小ICON
try {
mBuilder .setSmallIcon(R.drawable.ic_mobileoffice);
}catch (Exception e){
e.printStackTrace();
}
mBuilder.setContentIntent(pendingIntent);
notificationManager.notify(getRandom(),mBuilder.build());
/**
* 解决android8.0不能弹出notification的问题
* @param notificationManager
*/
@RequiresApi(api = Build.VERSION_CODES.O)
public void createNotificationChannel(NotificationManager notificationManager) {
NotificationChannel channel = new NotificationChannel("YOUR_CHANNEL_ID001","YOUR_CHANNEL_NAME",NotificationManager.IMPORTANCE_HIGH);
notificationManager.createNotificationChannel(channel);
}
/**
* 添加一个id,实现可以显示多条通知
* @return
*/
private int getRandom (){
UUID uuid = UUID.randomUUID();
int id = uuid.hashCode();
return id;
}