Android Notification 通知栏的使用和介绍以及8.0通知适配

最近项目中需要自定义notification,碰见了一些问题总结一下:

一、Notification的基本使用及8.0上不显示
notification的基本的创建过程如下,遇到的问题是在android 8.0以上设置时,需要设置渠道信息才能够正常显示通知。Android O 引入了Notification Channels,对于每个Notification Channel我们都可以去设置他的一些属性。
构建Notification Channel对象时我们传入的三个参数:
id:channdel的id,每个都必须是唯一的。
name:channdel的名称
importance:通知重要性级别

名称 属性
IMPORTANCE_DEFAULT or IMPORTANCE_HIGH
IMPORTANCE_LOW
IMPORTANCE_DEFAULT or IMPORTANCE_HIGH
IMPORTANCE_MIN
IMPORTANCE_NONE 不会出现在状态栏上

关于notificationchannel我们可以参考
https://developer.android.google.cn/reference/android/app/NotificationChannel
二、通知栏点击事件
对于小米手机超过三条通知点击会展开,其他的一些手机华为,360等超过三条会合并通知,点击后会出现执行最早那一条通知的点击事件
PendingIntent 提供了一个方法getBroadcast( ),主要有context Context,requestCode,
Intent:

,flags四个参数
可以参考https://developer.android.google.cn/reference/android/app/PendingIntent

 int requestCode = (int) System.currentTimeMillis();
 NotificationManager mNotifyManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
 //适配安卓8.0的消息渠道
 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
     NotificationChannel channel = new NotificationChannel(channelId, channelName,    NotificationManager.IMPORTANCE_HIGH);
     mNotifyManager.createNotificationChannel(channel);
 }
 Intent intent = new Intent(context, NotificationClickReceiver.class);
 intent.putExtra(Constant.ORDER_ID, bean.getOrderId());
 PendingIntent pendingIntent = PendingIntent.getBroadcast(context, requestCode,      intent, PendingIntent.FLAG_CANCEL_CURRENT);
 Notification notification = new NotificationCompat.Builder(context, channelId)
         .setContentTitle(title)//设置通知栏标题
         .setTicker(title)
         .setContentText(content)
         .setWhen(System.currentTimeMillis())
         .setAutoCancel(true)
         .setSmallIcon(R.mipmap.ic_logo)
         .setDefaults(NotificationCompat.DEFAULT_ALL)
         .setLargeIcon(BitmapFactory.decodeResource(context.getResources(), R.mipmap.ic_logo))
         .setContentIntent(pendingIntent)
         .build();
 mNotifyManager.notify(requestCode, notification);



class NotificationClickReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        int flag= intent.getIntExtra(Constant.ORDER_ID,0) ;
        if (0 == flag) {
        }
    }
}
 

你可能感兴趣的:(Android Notification 通知栏的使用和介绍以及8.0通知适配)