当我看到Notification通知的这个知识点时,我就确定了下一个学习内容就是它了。在我印象中Notification通知是个有趣的机制,比如说我手机上有新闻类的APP,当有热门的信息时,APP就会推送消息给我,而我选择是否查看。当然,如果是我感兴趣的内容 我就会点进去看。接下来详细学习Notification。
Notification,俗称通知,是一种具有全局效果的通知,它展示在屏幕的顶端,首先会表现为一个图标的形式,当用户向下滑动的时候,展示出通知具体的内容。
注意:因为一些Android版本的兼容性问题,对于Notification而言,Android3.0是一个分水岭,在其之前构建Notification推荐使用Notification.Builder构建,而在Android3.0之后,一般推荐使用NotificationCompat.Builder构建。
Notification通知功能作用:
1.显示接收到短消息、即使消息等信息 (如QQ、微信、新浪、短信);
2.显示客户端的推送消息(如有新版本发布,广告,推荐新闻等);
3.显示正在进行的事物(例如:后台运行的程序)(如音乐播放器、版本更新时候的下载进度等);
通知的用法还是比较灵活的,既可以在活动里创建,也可以广播接收器里面创建,当然也可以在服务里面创建。相比于后两者,在活动里面创建的实际情况还是比较少的,因为一般只有当程序进入到后台的时候才需要使用通知。不过,无论是在哪创建通知,整体的步骤都是大致相同。
实现默认通知的详细步骤:首先创建NotificationManager 来对通知进行管理,可以调用Context的getSystemService()方法来取到,再传入NOTIFICATION_SERVICE来确定取得系统哪个服务。
NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
这个时候需要创建一个Notification对象,用于承载通知的内容。但是一般在实际使用过程中,一般不会直接构建Notification对象,而是使用它的一个内部类NotificationCompat.Builder来实例化一个对象(Android3.0之下使用Notification.Builder)。NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(MainActivity.this);
并对Builder进行配置各种属性:
mBuilder.setContentTitle("this is setContentTitle text")
.setContentText("this is setContentText text")
.setSmallIcon(R.drawable.a1)
.setTicker("New Message")
//.setNumber(number) //设置通知集合的数量
.setNumber(12)
.setAutoCancel(true)//设置这个标志当用户单击面板就可以让通知将自动取消
.setLargeIcon(btm);
接下来:设置点击效果PendingIntent,在设置之前先来介绍PendingIntent,从名字上看起来有点像Intent,他们之间也确实处存在着不少相同点。Intent是立即执行某个动作,而PendingIntent是在某个何时的时机去执行某个动作。主要用于远程服务通信、闹铃、通知、启动器、短信中,在一般情况下用的比较少。PendingIntent的用法很简单,它主要提供几个静态的方法用于获取PendingIntent,可以根据需求来选择getActivity()、getBroadcast()、getServise()方法,第一个参数是Context,第二个一般用不着,传个0就好,第三个是一个Intent参数,第四个参数用于确定PendingIntent的行为:
// 构建一个Intent
Intent intent = new Intent(MainActivity.this, NotificationActivity.class);
// 封装一个PendingIntent
PendingIntent pi = PendingIntent.getActivity(MainActivity.this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
mBuilder.setContentIntent(pi);
完成以上工作后,只需要调用NotificationManager的notify()方法就可以让通知显示出来,notify()方法接收两个参数:第一个参数是id,保证每个通知所指定的id都是不同的。第二个参数是Notification对象,这样就完成了。
notificationManager.notify(1, mBuilder.build());
查看效果:
完整代码:
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//定义按钮,启动通知
findViewById(R.id.send_notice).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//定义图标
Bitmap btm = BitmapFactory.decodeResource(getResources(), R.drawable.a1);
//获取状态通知栏管理
NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
//实例化通知栏构造器
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(MainActivity.this)
.setContentTitle("this is setContentTitle text")
.setContentText("this is setContentText text")
.setSmallIcon(R.drawable.a1)
.setTicker("New Message")
//.setNumber(number) //设置通知集合的数量
.setNumber(12)
.setAutoCancel(true)//设置这个标志当用户单击面板就可以让通知将自动取消
.setLargeIcon(btm);
// 构建一个Intent
Intent intent = new Intent(MainActivity.this, NotificationActivity.class);
// 封装一个PendingIntent
PendingIntent pi = PendingIntent.getActivity(MainActivity.this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
mBuilder.setContentIntent(pi);
notificationManager.notify(1, mBuilder.build());
}
});
}
}
1、方法:.setSound(Uri sound):设置默认或则自定义的铃声,来提醒。
//获取默认铃声
.setDefaults(Notification.DEFAULT_SOUND)
//获取自定义铃声
.setSound(Uri.parse("file:///sdcard/xx/xx.mp3"))
//获取Android多媒体库内的铃声
.setSound(Uri.withAppendedPath(Audio.Media.INTERNAL_CONTENT_URI, "5"))
2、方法:setVibrate(long[] pattern):设置震动方式。
.setVibrate(new long[] {0,1000,1000,1000});
实现的效果是振动1秒,停止1秒,再振动1秒。
需要添加权限:
3、方法:.setLights(intledARGB ,intledOnMS ,intledOffMS):前置LED灯闪烁
描述:其中ledARGB 表示灯光颜色、 ledOnMS 亮持续时间、ledOffMS 暗的时间,以毫秒为单位。
注意:1)只有在设置了标志符Flags为Notification.FLAG_SHOW_LIGHTS的时候,才支持三色灯提醒。
2)这边的颜色跟设备有关,不是所有的颜色都可以,要看具体设备。
.setLights(0xff0000ff, 300, 0)
4、方法:.setPriority(int pri):优先级
优先级 | 用户 |
---|---|
MAX | 重要而紧急的通知,通知用户这个事件是时间上紧迫的或者需要立即处理的。 |
HIGH | 高优先级用于重要的通信内容,例如短消息或者聊天,这些都是对用户来说比较有兴趣的。 |
DEFAULT | 默认优先级用于没有特殊优先级分类的通知。 |
LOW | 低优先级可以通知用户但又不是很紧急的事件。 |
MIN | 用于后台消息 (例如天气或者位置信息)。最低优先级通知将只在状态栏显示图标,只有用户下拉通知抽屉才能看到内容。 |
对应属性(作用看上图就可知道):
Notification.PRIORITY_DEFAULT
Notification.PRIORITY_HIGH
Notification.PRIORITY_LOWNotification.PRIORITY_MAX
Notification.PRIORITY_MIN5、自定义带按钮通知栏、进度条通知、循环进度通知:
http://bbs.9ria.com/thread-241146-1-1.html
http://blog.csdn.net/vipzjyno1/article/details/25248021/