当前位置: 代码迷 >> 综合 >> 解决在Android 8.0无法显示通知,Android 8.0通知系统适配
  详细解决方案

解决在Android 8.0无法显示通知,Android 8.0通知系统适配

热度:86   发布时间:2023-10-18 18:09:42.0

概述

Android 8.0 系统,Google引入通知渠道,提高用户体验,方便用户管理通知信息,同时也提高了通知到达率。

通知适配

Android 8.0 功能和 API

  • 配置
    build.gradle 中targetSdkVersion设置大于等于26。这时如果不对通知渠道适配,通知就无法显示。
  • 代码

 

   /*** 显示通知栏* @param context 上下文对象* @param pushMsg 消息bean类*/private void showNotification(Context context, PushMsgInfo pushMsg) {NotificationManager nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);// 兼容 8.0 系统if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {createNotificationChannel(context, nm);}NotificationCompat.Builder builder = createNotificationCompatBuilder(context, pushMsg);nm.notify(0, builder.build());}@NonNullprivate NotificationCompat.Builder createNotificationCompatBuilder(Context context, PushMsgInfo pushMsg) {// 通知栏点击接收者Intent i = new Intent(context, OnPushClickRecevier.class);i.setAction(OnPushClickRecevier.ACTION);i.putExtra("data", pushMsg);PendingIntent pendingIntent = PendingIntent.getBroadcast(context, mMessageId, i, PendingIntent.FLAG_UPDATE_CURRENT);NotificationCompat.Builder builder = new NotificationCompat.Builder(context);builder.setContentIntent(pendingIntent);builder.setSmallIcon(R.drawable.ic_haofang);builder.setContentTitle(pushMsg.getTitle());builder.setContentText(pushMsg.getDescription());builder.setAutoCancel(true);builder.setDefaults(Notification.DEFAULT_ALL);String stoneRing = "通知声音地址";if (!TextUtils.isEmpty(stoneRing)) {builder.setSound(Uri.parse(stoneRing));}return builder;}@TargetApi(Build.VERSION_CODES.O)private void createNotificationChannel(Context context, NotificationManager notificationManager) {// 通知渠道NotificationChannel mChannel = new NotificationChannel("渠道Id", "渠道名称", NotificationManager.IMPORTANCE_HIGH);// 开启指示灯,如果设备有的话。mChannel.enableLights(true);// 开启震动mChannel.enableVibration(true);// ?设置指示灯颜色mChannel.setLightColor(Color.RED);// 设置是否应在锁定屏幕上显示此频道的通知mChannel.setLockscreenVisibility(Notification.VISIBILITY_PRIVATE);// 设置是否显示角标mChannel.setShowBadge(true);// ?设置绕过免打扰模式mChannel.setBypassDnd(true);// 设置震动频率mChannel.setVibrationPattern(new long[]{100, 200, 300, 400});//最后在notificationmanager中创建该通知渠道notificationManager.createNotificationChannel(mChannel);}

注意:
1.创建通知渠道 createNotificationChannel() 一定要写在创建显示通知之前。
2.创建通知渠道的代码只在第一次执行的时候才会创建,以后每次执行创建代码系统会检测到该通知渠道已经存在了,因此不会重复创建,也并不会影响任何效率。

  • NotificationChannel 构造函数

 

    /*** NotificationChannel 构造函数* @param id 渠道id* @param name 渠道名称* @param importance 渠道重要等级 IMPORTANCE_HIGH IMPORTANCE_DEFAULT IMPORTANCE_LOW IMPORTANCE_MIN*/public NotificationChannel(java.lang.String id, java.lang.CharSequence name, int importance) {// TODO compiled code}

相关文章

公众号
Android 8.0 通知


 

  相关解决方案