安卓使用通知和用户交互是一个非常不错的选择,也是我们项目中经常用到的一个功能,所以今天有必要对这块做一下归纳。安卓发送的通知效果就是在状态栏显示一个通知的小图标,当下拉通知栏的时候可以看到整个消息的内容,同时在接收到消息的时候可以带声音、提示灯闪烁、震动、进度条等等,单用户点击通知的内容时也可以使用Intent干任何你想做的事,比如打开一个app,打开指定的网页,拨打电话等等,通知的一般样式如下图所示:
这是一个普通的通知,标号分别代表下面的含义:
1、大图标
2、标题
3、内容
4、文本摘要
5、通知的时间
6、小图标(当通知栏没有下拉的时候就是现实这个图标)
通知分为普通通知、自定义通知、特殊样式的通知。其中特殊样式的通知分为三类:NotificationCompat.InboxStyle、NotificationCompat.BigTextStyle、NotificationCompat.BigPictureStyle,他们与普通通知的区别就是风格不一样,其余的都是一样的。如果在使用通知的时候需要闪灯和震动,需要添加对应的权限:
<span style="font-size:10px;"> <uses-permission android:name="android.permission.FLASHLIGHT" />
<uses-permission android:name="android.permission.VIBRATE" /></span>
要发送一个通知,需要以下几个步骤:
1、使用系统服务获取notificationManager对象
2、使用notification或者notification.builder构建一个消息对象
3、使用notificationManager.notify()把消息发送出去
获取notificationmanager和notification.builder对象:
<span style="font-size:10px;"> NotificationCompat.Builder</span>
<span style="font-size:10px;"> // 获取消息管理者
notim = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
// 获取到兼容版本的消息对象
notiBuilder = new NotificationCompat.Builder(this);</span>
对notification.builder进行设置:
notiBuilder
// 点击消息后是否会自动取消,此设置必须要设置contentintent才有效
.setAutoCancel(false)
// 三项必设置
.setContentTitle("消息的标题")
.setContentText("消息的内容")
.setSmallIcon(R.drawable.ic_launcher)
// 文本的内容
.setContentInfo("我是ContentInfo")
// 指示灯闪烁
.setLights(Color.LTGRAY, 5000, 5000)
// 消息到达的时候上面滚动的文字
.setTicker("你有一封新的短消息~请注意查收!")
// 设置Intent跳转
.setContentIntent(pIntent)
// 设置消息到达的时间
.setWhen(System.currentTimeMillis() + 100000000)
// 震动
.setVibrate(new long[] { 500, 500, 1000, 500 })
// 设置大图标
.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.bigpic));
之后调用notificationmanager的notify方法把消息发送出去。
ok,上面是发送一个普通的消息,我先贴上我的demo截图,然后说下发送特殊样式消息和自定义消息。
先来NotificationCompat.BigPictureStyle发送的特殊消息,其余的样式使用方法类似,就不再贴出了,如果不会可以看下载我的Demo查看。
代码:
<span style="font-size:10px;"> // 发送大图片消息
public void sendPicNoti(View view) {
// 得到样式对象
NotificationCompat.BigPictureStyle bs = new NotificationCompat.BigPictureStyle(notiBuilder);
// 对样式设置
bs.bigLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.bigicon))
.bigPicture(BitmapFactory.decodeResource(getResources(), R.drawable.bigpic))
.setBigContentTitle("BigContentTitle").setSummaryText("SummaryText");
setNotiInfo();
// 发送消息
notim.notify(10, notiBuilder.build());
}</span>
发送一个自定义消息的代码:
<span style="font-size:10px;">// 发送自定义消息
public void sendCustom(View view) {
RemoteViews views = new RemoteViews(getPackageName(), R.layout.custom_noti);
views.setImageViewResource(R.id.imgv, R.drawable.bigpic);
views.setTextViewText(R.id.txtv, "我是自定义视图");
Notification noti = new Notification(R.drawable.ic_launcher, "你有一封新的短消息", System.currentTimeMillis());
noti.contentView = views;
notim.notify(3, noti);
}</span>
ok,消息的使用大概就是这样的,如果需要显示一个进度条,可以设置builder.setProgress(max, progress, indeterminate),前两个分别为最大进度和当前进度,第三个参数为这个进度条是否显示具体的进度。最后附上我的demo: demo下载
扫描关注我的微信公众号: