我们以前在做通知栏的时候直接Notification就行了,但是在高版本上不适用,查了资料改了部分东西那就是"NotificationChannel",当你的targetSdkVersion小于26将无法显示
Android O引入了通知渠道(nitifition channel)用于用户统一处理,像V信QQ等社交软件一样
推送三方SDK也同样把这个封装进去了,比如:友盟、极光等
那我们先看一下系统自带的notifition
Notification notification = new Notification();notification.icon = R.mipmap.ic_launcher; // 小图标notification.largeIcon = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher_round); // 大图标notification.defaults = Notification.DEFAULT_ALL; // 设置默认的提示音、振动方式、灯光等notification.category = "Category";notification.when = System.currentTimeMillis(); // 设置通知发送的时间戳notification.tickerText = "Ticker Text"; // 设置通知首次弹出时,状态栏上显示的文本notification.flags = Notification.FLAG_AUTO_CANCEL; // 点击通知后通知在通知栏上消失notification.contentIntent = PendingIntent.getActivity(MainActivity.this, 0x001, new Intent(MainActivity.this, TargetActivity.class), PendingIntent.FLAG_UPDATE_CURRENT); // 设置通知的点击事件((NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE)).notify(1, notification); // 发送系统通知
<figure style="font-size: inherit; color: inherit; line-height: inherit; margin: 0px; padding: 0px;">
image
<figcaption style="line-height: inherit; margin: 0px; padding: 0px; margin-top: 10px; text-align: center; color: rgb(153, 153, 153); font-size: 0.7em;"></figcaption>
</figure>
通过上面代码可以看到我们是无需API版本来控制,但是在高版本中无法显示,并且操作的少之又少,我们可以使用它的Builder来创建
Notification notification = new NotificationCompat.Builder(context, Constant.Notification_Channel_Order_Id) /**设置通知左边的大图标**/ .setLargeIcon(BitmapFactory.decodeResource(context.getResources(), R.mipmap.ic_launcher)) /**设置通知右边的小图标**/ .setSmallIcon(R.mipmap.ic_launcher) /**通知首次出现在通知栏,带上升动画效果的**/ .setTicker("通知来了") /**设置通知的标题**/ .setContentTitle("测试:通知的标题") /**设置通知的内容**/ .setContentText("测试:通知的内容这是一个通知的内容") /**通知产生的时间,会在通知信息里显示**/ .setWhen(System.currentTimeMillis()) /**设置该通知优先级**/ .setPriority(Notification.PRIORITY_DEFAULT) /**设置这个标志当用户单击面板就可以让通知将自动取消**/ .setAutoCancel(true) /**设置他为一个正在进行的通知。他们通常是用来表示一个后台任务,用户积极参与(如播放音乐)或以某种方式正在等待,因此占用设备(如一个文件下载,同步操作,主动网络连接)**/ .setOngoing(false) /**向通知添加声音、闪灯和振动效果的最简单、最一致的方式是使用当前的用户默认设置,使用defaults属性,可以组合:**/// .setDefaults(Notification.DEFAULT_VIBRATE | Notification.DEFAULT_SOUND)// .setSound(Uri.parse("android.resource://" + context.getPackageName() + "/" + R.raw.ordermusic)) .setContentIntent(PendingIntent.getActivity(context, 1, new Intent(context, MainActivity.class), PendingIntent.FLAG_CANCEL_CURRENT)) .build(); NotificationManager notificationManager = (NotificationManager) context.getSystemService(NOTIFICATION_SERVICE); deleteNoNumberNotification(notificationManager,"default"); /**发起通知**/ notificationManager.notify(1, notification);
就这样就可以在高版本中使用了。假如我不喜欢现在的布局样式该怎么去自定义布局来显示我的通知
NotificationCompat.Builder builder = new NotificationCompat.Builder(this); builder.setSmallIcon(R.mipmap.ic_launcher); RemoteViews rv = new RemoteViews(getPackageName(), R.layout.custom_notification); rv.setTextViewText(R.id.tv, "泡沫");//修改自定义View中的歌名 //修改自定义View中的图片(两种方法)// rv.setImageViewResource(R.id.iv,R.mipmap.ic_launcher); rv.setImageViewBitmap(R.id.iv, BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher)); builder.setContent(rv); builder.setSound( Uri.parse("android.resource://" + this.getPackageName() + "/" + R.raw.ordermusic)); Notification notification = builder.build(); NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); notificationManager.notify(1, notification);
接下来讲RemoteViews原理与推送通知跳转指定页面
参考文章:https://www.jianshu.com/p/ca92797d925a
关注公众号《Android技术大杂烩》
image.png
网友评论