✤✤✤ 前言 ✤✤✤
这周课题是关于通知的了解,平时我们能看到很多应用发送的通知消息,有时候多了你会觉得很烦,有时候你又会点击进去查看内容。对于开发者而言,不仅仅要考虑是否打扰用户还要考虑外观是否吸引用户,以及点击通知后续的操作问题。今天就来说一说怎么去创建不同风格的通知栏吧。
✤✤✤ 重点 ✤✤✤
我们创建通知栏可以在服务(Service)、广播(BroadcastReceiver)、活动(Activity)中进行创建,一般我们在应用开发中更多是基于服务和广播中进行创建通知。为了方便了解通知的创建我的以下例子都是活动(Activity)中进行创建
创建普通样式☟
代码如下 由于Android8.0通知栏做了修改,需要设置通道,否则会提示创建通知失败,所以需要加上版本判断 。8.0系统长按还可出现通知信息,不过这是系统底层实现的功能,没准你用的anroid手机把这个功能去掉了呢。
private StringchannelId ="1";
private StringchannelName ="jelly";
public void onCreateNotifacation() {
NotificationManager manager =(NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
//判断系统是否是8.0
if (Build.VERSION.SDK_INT >=Build.VERSION_CODES.O) {
//需要创建通道
NotificationChannel channel =new NotificationChannel(channelId,channelName,NotificationManager.IMPORTANCE_DEFAULT);
channel.setDescription("渠道解释说明");
//是否显示未读消息点
channel.enableLights(true);
manager.createNotificationChannel(channel);
}
Notification notification =new NotificationCompat.Builder(this, "").setContentTitle("通知标题")
.setContentText("通知内容(This is content)")
.setWhen(System.currentTimeMillis())
.setSmallIcon(R.mipmap.ic_launcher)
.setLargeIcon(BitmapFactory.decodeResource
(getResources(), R.mipmap.ic_launcher)).setChannelId(channelId).build();
//显示通知
manager.notify(1, notification);
}
我们还可以对点击通知做跳转处理,红色标记为跳转所需要的参数☟
//在创建Notification之前 先创建PendingIntent
在设置setContentIntent属性
Intent intent = new Intent(this,SecondActivity.class);
PendingIntent pendingIntent= PendingIntent.getActivity(this, 0, intent, 0);
//跳转 跳转之后通知取消不再显示
notification.setContentIntent(pendingIntent)
.setAutoCancle(true)
.build();
manager.notify(1, notification);
}
一般我们看到的通知有很长文本,如果只是在setContentText("")方法中显示文本内容是显示不全的 这时候我们就需要setStyle()方法。
.setStyle(new NotificationCompat.BigTextStyle().bigText("根据通知style属性我们显示一段很长的文本,记得关注满天星\n" +
"愿你在被打击时 记起你的珍贵 抵抗恶意 \n" +
"愿你在迷茫时 坚信你的珍贵 \n" +
"爱你所爱 行你所行 听从你心 无问西东"))
展示如下☟
如果你需要展示一张图片 通知也是可以支持的同样是setStyle()方法
.setStyle(new NotificationCompat
.BigPictureStyle().bigPicture
(BitmapFactory.decodeResource
(getResources(),R.drawable.love)))
如果你需要设置你自己的通知栏属性 你就需要setCustomContentView()传入你需要展示的view
//创建notification之前先找到你自己的view
RemoteViews remoteViews =new RemoteViews(context.getPackageName(), R.layout.layout_notification);
remoteViews.setTextViewText
(R.id.tv_notification_time,DataFormatUtils.getFormatDate(new Date(System.currentTimeMillis())));
remoteViews.setViewVisibility(R.id.tv_notification_contentssmall,View.VISIBLE);
remoteViews.setTextViewText(R.id.tv_notification_contentssmall,title);
.setCustomContentView(remoteViews)
还有一些其他的定制属性,可能平时会用到 例如我们收到通知的时候会有特定的声音,当然这必须在手机没静音的情况才会听到 setSound()属性 可以是手机中的音乐文件 也可以是项目中的音乐文件 一下是设置的apk中raw目录下的音乐文件
.setSound(Uri.parse("android.resource://"+getPackageName() +"/" + R.raw.d))
还有setLight()设置呼吸灯闪烁 颜色及时间 启动速率和关闭时间
//呼吸灯
.setLights(Color.BLUE, 1000, 2000)
setVibrate()设置震动,需要添加震动权限
//设置震动 还需要添加权限
.setVibrate(new long[1000])
setPriority()设置通知优先级,低优先级的通知可能被隐藏 如果优先级高的会一直被显示 如果用户不操作通知栏的情况下
//设置优先级
.setPriority(NotificationCompat.PRIORITY_MAX)
✤✤✤ 结束 ✤✤✤
关于通知需要注意的是,如果用户把你的app通知权限关闭了,那么你的通知就不会再显示了。所以如果你要通过通知给用户一些很重要的信息,那么你就得需要在app中去实现监听通知的状态并进行提示了。有任何问题,欢迎指正