Android Notification

Android 通知不显示?

看书的时候,按照代码写一个通知,万万没想到,竟然显示不出来,我的天,My Cod !

手机坏了?  What ?

经过一份搜索,原来android 8.0之后通知需要加入channelId元素,否则无法显示通知,老衲手机是Android 9 (哼,趁我不注意自己升级,差评);

这就郁闷了,还是记录一下,下次遇到方便查找。


实现通知的示例代码(兼容Android O):

/**
 * 显示通知
 */
private void showFoldNotification() {
    NotificationCompat.Builder notificationCompatBuilder = 
            new NotificationCompat.Builder(getApplicationContext(), 
            Objects.requireNonNull(createNotificationChannel(this)));
    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.baidu.com"));
    PendingIntent pi = PendingIntent.getActivity(this, 0, intent, 0);
    Notification notification = notificationCompatBuilder
            .setContentTitle("标题")
            .setContentText("内容")
            .setSmallIcon(R.mipmap.ic_launcher)
            .setLargeIcon(BitmapFactory.decodeResource(
                    getResources(),
                    R.mipmap.ic_launcher))
            .setContentIntent(pi)
            .setDefaults(NotificationCompat.DEFAULT_ALL)
            .setColor(ContextCompat.getColor(getApplicationContext(), R.color.colorPrimary))
            .setWhen(System.currentTimeMillis()) 
            .setPriority(NotificationCompat.PRIORITY_DEFAULT)
            .setAutoCancel(true)
            .build();
    NotificationManagerCompat.from(getApplicationContext()).notify(1, notification);
}

代码段 小部件

/**
 * 删除通知渠道
 */
NotificationChannel mChannel = mNotificationManager.getNotificationChannel(id);
mNotificationManager.deleteNotificationChannel(mChannel);



详谈通知的基本使用:

创建通知:

获取NotificationManagers实例,管理通知:
NotificationManager notificationManager =
        (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);

创建NotificationCompat.Builder对象
NotificationCompat.Builder builder = new NotificationCompat.Builder(getApplicationContext(), channelId);

为Notification设置内容:

.setContentTitle("标题")     //设置通知标题
.setContentText("内容")      //设置通知内容
.setSmallIcon(R.mipmap.ic_launcher)  //设置通知的小图标
.setLargeIcon(BitmapFactory.decodeResource(
        getResources(),
        R.mipmap.ic_launcher))   //设置通知图标
.setWhen(System.currentTimeMillis())   //设置时间
.setContentIntent(pi)             // 设置点击通知时的意图
.setDefaults(NotificationCompat.DEFAULT_ALL)  //打开呼吸灯,声音,震动(下方详解)
.setColor(ContextCompat.getColor(getApplicationContext(), R.color.colorPrimary))  //设置通知栏颜色
.setCategory(Notification.CATEGORY_REMINDER)  //设置通知类别
.setPriority(NotificationCompat.PRIORITY_DEFAULT)  //设置优先级,级别高的排在前面
.setVibrate(new long[]{100,200,300,400})     //设置震动
.setLight(Color.Red,500,500)   //设置呼吸灯效果,一般三种颜色:红绿蓝
.setAutoCancel(true);    //设置通知点击后图标消失

 创建NotificationChannel :

public static String createNotificationChannel(Context context) {    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        channelId:全局唯一,长度不能过长
        channelName:渠道名称,显示在通知栏列表 
        channelDescription: 设置描述 最长30字符
        importance:重要等级,等级不同在手机桌面上展示的顺序不同

        NotificationChannel notificationChannel = new NotificationChannel(channelId, channelName, channelImportance);
        notificationChannel.setDescription(channelDescription);
        // 允许通知使用震动,默认为false
        notificationChannel.enableVibration(true);
        // 设置显示模式
        notificationChannel.setLockscreenVisibility(NotificationCompat.VISIBILITY_PUBLIC);

        NotificationManager notificationManager =
                (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.createNotificationChannel(notificationChannel);

        return channelId;
    } else {
        return null;
    }
}

删除渠道通知:

NotificationChannel mChannel = mNotificationManager.getNotificationChannel(id); mNotificationManager.deleteNotificationChannel(mChannel);


看书的时候,按照代码写一个通知,万万没想到,竟然显示不出来,我的天,手机坏了?  经过一份搜索,原来android 8.0之后通知需要加入channelId元素,否则无法显示通知,这就郁闷了,还是记录一下,下次遇到方便查找。

 

NotificationChannel 的方法列表:

getId() —  获取 ChannleId
enableLights() —  开启指示灯,如果设备有的话
setLightColor() —  设置指示灯颜色
enableVibration() —  开启震动
setVibrationPattern() —  设置震动频率
setImportance() —  设置频道重要性
getImportance() —  获取频道重要性
setSound() —  设置声音
getSound() —  获取声音
setGroup() —  设置 ChannleGroup
getGroup() —  得到 ChannleGroup
setBypassDnd() —  设置绕过免打扰模式
canBypassDnd() —  检测是否绕过免打扰模式
getName() —  获取名称
setLockScreenVisibility() —  设置是否应在锁定屏幕上显示此频道的通知
getLockscreenVisibility() —  检测是否应在锁定屏幕上显示此频道的通知
setShowBadge() 设置是否显示角标
canShowBadge() —  检测是否显示角标

 

 NotificationChannel中importance: 

IMPORTANCE_NONE = 0; 不提示,不展示

IMPORTANCE_MIN = 1; 不提示,在通知下拉栏会展示,但是是收起的

IMPORTANCE_LOW = 2; 会在状态栏中显示,但不会弹窗,通知下拉栏会展示

IMPORTANCE_DEFAULT = 3; 会在状态栏中显示,允许有声音提示,但不会弹窗,通知下拉栏会展示

IMPORTANCE_HIGH = 4; 会弹窗提示,允许有提示音

IMPORTANCE_MAX = 5; 会弹窗提示,允许有提示音,可以使用全屏

 

Notification.Builder中的setDefaults:

setDefaults(NotificationCompat.DEFAULT_VIBRATE) ;    // 添加默认震动提醒

setDefaults(NotificationCompat.DEFAULT_SOUND) ;     // 添加默认声音提醒

setDefaults(NotificationCompat.DEFAULT_LIGHTS) ;     // 添加默认闪光灯提醒

setDefaults(NotificationCompat.DEFAULT_ALL) ;           // 添加默认以上三种提醒


 

你可能感兴趣的:(Android)