让人又爱又恨的Notification

                                                                   ✤✤✤  前言 ✤✤✤

这周课题是关于通知的了解,平时我们能看到很多应用发送的通知消息,有时候多了你会觉得很烦,有时候你又会点击进去查看内容。对于开发者而言,不仅仅要考虑是否打扰用户还要考虑外观是否吸引用户,以及点击通知后续的操作问题。今天就来说一说怎么去创建不同风格的通知栏吧。

                                                                  ✤✤✤  重点  ✤✤✤

我们创建通知栏可以在服务(Service)、广播(BroadcastReceiver)、活动(Activity)中进行创建,一般我们在应用开发中更多是基于服务和广播中进行创建通知。为了方便了解通知的创建我的以下例子都是活动(Activity)中进行创建

创建普通样式☟

让人又爱又恨的Notification_第1张图片


让人又爱又恨的Notification_第2张图片

代码如下 由于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" +

"爱你所爱 行你所行 听从你心 无问西东"))

展示如下☟


让人又爱又恨的Notification_第3张图片

如果你需要展示一张图片 通知也是可以支持的同样是setStyle()方法

.setStyle(new NotificationCompat

.BigPictureStyle().bigPicture

(BitmapFactory.decodeResource

(getResources(),R.drawable.love)))


让人又爱又恨的Notification_第4张图片

如果你需要设置你自己的通知栏属性 你就需要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中去实现监听通知的状态并进行提示了。有任何问题,欢迎指正

你可能感兴趣的:(让人又爱又恨的Notification)