Android8.0 Notification报错

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;
}

你可能感兴趣的:(Android8.0+)