关于Notification不显示问题,及Android 8.0版本以上的通知Notification 配置

通知不显示问题

如果在Notification配置没有问题的情况下,通知仍然没有显示,原因可能是因为android版本问题;
if (mContext.getApplicationInfo().targetSdkVersion < Build.VERSION_CODES.N
                    && (useExistingRemoteView())) {
                if (mN.contentView == null) {
                    mN.contentView = createContentView();
                    mN.extras.putInt(EXTRA_REBUILD_CONTENT_VIEW_ACTION_COUNT,
                            mN.contentView.getSequenceNumber());
                }
                if (mN.bigContentView == null) {
                    mN.bigContentView = createBigContentView();
                    if (mN.bigContentView != null) {
                        mN.extras.putInt(EXTRA_REBUILD_BIG_CONTENT_VIEW_ACTION_COUNT,
                                mN.bigContentView.getSequenceNumber());
                    }
                }
                if (mN.headsUpContentView == null) {
                    mN.headsUpContentView = createHeadsUpContentView();
                    if (mN.headsUpContentView != null) {
                        mN.extras.putInt(EXTRA_REBUILD_HEADS_UP_CONTENT_VIEW_ACTION_COUNT,
                                mN.headsUpContentView.getSequenceNumber());
                    }
                }

这段是notify.build()方法的具体实现的代码,大家可以看到如果mContext.getApplicationInfo().targetSdkVersion < Build.VERSION_CODES.N
contentview将会返回null,这是我们通知没有显示的原因。

android API26 以上 notification的配置

所以,如果你的android 版本api在26以下系统会提供默认的contentview,但是如果高于此版本,我们代码还需要多一些配置;

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                    NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);O
                    // 通知渠道的id 这个地方只要一直即可
                    String id = "chat";
                    // 用户可以看到的通知渠道的名字.
                    CharSequence name = "notification channel";
                    // 用户可以看到的通知渠道的描述
                    String description = "notification description";
                    int importance = NotificationManager.IMPORTANCE_HIGH;
                    NotificationChannel mChannel = new NotificationChannel(id, name, importance);
                    // 配置通知渠道的属性
                    mChannel.setDescription(description);
                    // 设置通知出现时的闪灯(如果 android 设备支持的话)
                    mChannel.enableLights(true);
                    mChannel.setLightColor(Color.RED);
                    // 自定义声音
                    mChannel.setSound(Uri.parse("android.resource://" + getPackageName() + "/raw/qqqq"),null);
                    // 设置通知出现时的震动(如果 android 设备支持的话)
                    mChannel.enableVibration(true);
                    mChannel.setVibrationPattern(new long[]{100, 200, 300, 400, 500, 400, 300, 200, 400});
                    //最后在notificationmanager中创建该通知渠道
                    mNotificationManager.createNotificationChannel(mChannel);
                }
notify1 = new Notification.Builder(this,"chat")
                        .setContentTitle("叶良辰")                        //标题
                        .setContentText("我有一百种方法让你呆不下去~")      //内容
                        .setSubText("——记住我叫叶良辰")                    //内容下面的一小段文字
                        .setTicker("收到叶良辰发送过来的信息~")             //收到信息后状态栏显示的文字信息
                        .setWhen(System.currentTimeMillis())           //设置通知时间
                        .setSmallIcon(R.mipmap.password)            //设置小图标
                        .setLargeIcon(LargeBitmap)                     //设置大图标
                        .setDefaults(Notification.DEFAULT_LIGHTS | Notification.DEFAULT_VIBRATE)    //设置默认的三色灯与振动器
                        .setAutoCancel(true)
                        .setContentIntent(pit)
                        .build();
                //设置点击后取消Notification
                mNManager.notify(NOTIFYID_1, notify1);                

这里的id 是可以随意设置的,但是前后要一致。如此配置,通知终于显示了。
关于Notification不显示问题,及Android 8.0版本以上的通知Notification 配置_第1张图片

你可能感兴趣的:(关于Notification不显示问题,及Android 8.0版本以上的通知Notification 配置)