美文网首页Android开发学习
Android 8.0通知系统适配

Android 8.0通知系统适配

作者: IT一书生 | 来源:发表于2018-05-21 14:37 被阅读997次

    概述

    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());
        }
    
        @NonNull
        private 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 通知

    相关文章

      网友评论

      • f90614b0b5e3:怎么关闭声音?我做更新 一直响个不停
        远方夕阳:@IT一书生 使用channel的时候 无法动态开启/关闭通知声音,除非卸载重装,或者通知一直静音,自己控制播放声音
        IT一书生:@远方夕阳 我这边并没有遇到这个问题?应该没有关闭声音的设置,是不是你们用的声音时长有点长。
        远方夕阳:同问,解决了吗

      本文标题:Android 8.0通知系统适配

      本文链接:https://www.haomeiwen.com/subject/molfjftx.html