Notifycation速查笔记

/ 0评 / 1

Notifycation的组成元素

对于一个通知来说,主要包含下面六个部分。其中只有1、3、5三项是必须设置的,其余几项可选。不同ROM以及不同版本默认实现不同。

对上图中六个部分相应的设置函数如下

1.内容标题 setContentTitle()
2.大图标 setLargeIcon()
3.内容 setContentText()
4.内容附加信息 setNumber (int number)
5.小图标 setSmallIcon()
6.时间 setWhen/setShowWhen();

 创建一个Notifycation的步骤

1>实例化一个Notification.Builder对象

2>调用builder的相关方法对notification进行上面提到的各种设置

3>调用builder.build()方法此方法返回一个notification对象。

4>实例化一个NotificationManager对象。

5>调用NotificationManager的notify方法。

实例如下:

//实例化一个Notification.Builder对象
Notification.Builder builder = new Builder(this);
//调用builder的相关方法对notification进行上面提到的各种设置
builder.setSmallIcon(R.drawable.ic_launcher);
builder.setContentTitle("您有新的消息");
builder.setContentText("这是您的消息内容");
builder.setTicker("提示");//在通知栏顶部的提示

//builder.setDefaults(Notification.DEFAULT_SOUND);//设置提示声音
//builder.setDefaults(Notification.DEFAULT_LIGHTS);//设置指示灯
//builder.setDefaults(Notification.DEFAULT_VIBRATE);//设置震动
builder.setDefaults(Notification.DEFAULT_ALL);// 上面所有
builder.setAutoCancel(true);	//用户点击以后,通知消失
//builder.setOngoing(true);		//设置是否常驻通知栏
//指示灯和震动需要添加权限
//<uses-permission android:name="android.permission.FLASHLIGHT" />
//<uses-permission android:name="android.permission.VIBRATE" />


/* 设置点击通知启动一个Activity
*  使用PendingIntent 延迟的Intent,没有构造函数,只能通过
*  PendingIntent.getActivity 获取其实例
*/
builder.setContentIntent(PendingIntent.getActivity(this, 0, intent,0));

//调用builder.build()方法此方法返回一个notification对象。
Notification notify = builder.build();

//实例化一个NotificationManager对象
NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

//调用manager的notify方法
//id 标识通知,如果发送通知id相同,则更新通知,不同则显示多条通知,调用manager.cancel(id);取消通知
manager.notify(id, Notification)

自定义Notifycation的布局

要想自定义Notifycation的布局,我们需要使用android.widget.RemoteViews对象,然后通过setContent()方法即可将视图设置给Notifycation。如果我们想刷新一个已经发出的Notifycation,那么我们需要在调用NotificationManager的notify方法的时候传入相同的id即可。

//实例化一个RemoteViews
//packageName:对应资源文件包名 getPackageName() 获取当前程序的包
//layoutId:资源文件id
RemoteViews views = new RemoteViews(String packageName, int layoutId);

//可以调用其的setXXX方法设置布局里面的东西,比如
views.setTextViewText (int viewId, CharSequence text)

//设置RemoteViews到Notifycation,可以通过Notifycation实例设置,也可以通过Builder设置
Notifycation.setContext(RemoteViews)
Notifycation.Builder.setContext(RemoteViews)

支持的View类型

  • FrameLayout、LinearLayout、RelativeLayout、GridLayout、AnalogClock、Button、Chronometer、ImageButton、ImageView、ProgressBar、TextView、ViewFlipper、ListView、GridView、StackView、AdapterViewFlipper、ViewStub。
  • 只支持上述的View,不支持它们的子类和其他类型的View,所以无法在RemoteViews中自定义View,如果使用了不支持的布局那么会不显示

Notifycation的其他常用方法

优先级 用户
MAX 重要而紧急的通知,通知用户这个事件是时间上紧迫的或者需要立即处理的。 Notification.PRIORITY_MAX
HIGH 高优先级用于重要的通信内容,例如短消息或者聊天,这些都是对用户来说比较有兴趣的。 Notification.PRIORITY_HIGH
DEFAULT 默认优先级用于没有特殊优先级分类的通知。 Notification.PRIORITY_DEFAULT
LOW 低优先级可以通知用户但又不是很紧急的事件。 Notification.PRIORITY_LOW
MIN 用于后台消息 (例如天气或者位置信息)。最低优先级通知将只在状态栏显示图标,只有用户下拉通知抽屉才能看到内容。 Notification.PRIORITY_MIN

功能:设置为ture,表示它为一个正在进行的通知。他们通常是用来表示一个后台任务,用户积极参与(如播放音乐)或以某种方式正在等待,因此占用设备(如一个文件下载,同步操作,主动网络连接),常驻通知栏,只能通过NotifycationManager .cancel(id) 取消

max:进度条最大数值  、progress:当前进度、indeterminate:表示进度是否不确定,true为不确定,设置带进度条的通知,可以在下载中使用

Notifycation 8.0的更改

关于在高版本上面的Notifycation的改变,可以查看http://27house.cn/archives/1410

官方文档(请查看英文版,比较新)

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注