通知
常用功能
1.显示接收到短消息、即使消息等信息 (如QQ、微信、新浪、短信)
2.显示客户端的推送消息(如有新版本发布,广告,推荐新闻等)
3.显示正在进行的事物(例如:后台运行的程序)(如音乐播放器、版本更新时候的下载进度等)
基本布局
状态通知栏主要涉及到2个类: Notification 和 NotificationManager
Notification为通知信息类,它里面对应了通知栏的各个属性
NotificationManager 是状态栏通知的管理类,负责发通知、清除通知等操作。
注意:NotificationManager 是一个系统Service,所以必须通过 getSystemService(NOTIFICATION_SERVICE)方法来获取,方法如下。
流程简述:
1)获取通知栏管理
NotificationManager mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
2)实例化通知栏构造器NotificationCompat.Builder
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this);
3)设置通知的布局(这一步比较繁琐)
mBuilder.setContentTitle("title")//设置通知栏标题 .setContentText("content") //设置通知栏显示内容 .setNumber(10) //设置通知集合的数量 .setTicker("xxx,快递到了") //通知首次出现在通知栏,带上升动画效果的 .setWhen(System.currentTimeMillis())//通知产生的时间, .setPriority(Notification.PRIORITY_DEFAULT) //设置该通知优先级 .setAutoCancel(true)//设置这个标志当用户单击面板就可以让通知将自动取消 .setOngoing(false)//ture,设置他为一个正在进行的通知。 .setDefaults(Notification.DEFAULT_ALL)//向通知添加声音、闪灯和振动效果的最简单、最一致的方式是使用当前的用户默认设置,使用defaults属性,可以组合 .setSmallIcon(R.drawable.zed10);//设置通知小ICON
Intent intent = new Intent(this,Second.class); PendingIntent pendingIntent = PendingIntent.getActivity(this,1,intent,0); mBuilder.setContentIntent(pendingIntent);
什么是PendingIntent
PendingIntent和Intent略有不同,它可以设置执行次数,主要用于远程服务通信、闹铃、通知、启动器、短信中,在一般情况下用的比较少。
PendingIntent什么用
Notification支持多种Intent来响应单击事件、消除事件、处理紧急状态的全屏事件等。这里就用到了setContentIntent(PendingIntent intent)来处理以上这么多的事件。
PendingIntent的位标识符
FLAG_ONE_SHOT 表示返回的PendingIntent仅能执行一次,执行完后自动取消
FLAG_NO_CREATE 表示如果描述的PendingIntent不存在,并不创建相应的PendingIntent,而是返回NULL
FLAG_CANCEL_CURRENT 表示相应的PendingIntent已经存在,则取消前者,然后创建新的PendingIntent 这个有利于数据保持为最新的,可以用于即时通信的通信场景
FLAG_UPDATE_CURRENT 表示更新的PendingIntent
特别注意,PendingIntent必须设置位标识符,显而易见,标识符对应的PendingIntent的类型和状态,防止冲突与交叉异常的产生。
Intent更加倾向于去立即执行某个动作,而 PendingIntent 更加倾向于在某个合适的时机去执行某个动作
关于PendingIntent详细分析这里推荐参考http://blog.csdn.net/hudashi/article/details/7060837
5)显示通知
mNotificationManager.notify(1, mBuilder.build());
6)删除通知
mNotificationManager.cancel(id);
通知跳转实现截图:
源码:https://github.com/walkthehorizon/NotificationTest.git
实现在发送通知的时候的提示
铃声提示
Uri soundUri = Uri.fromFile(new File("app/Music/夜的钢琴曲.mp3")); notification.sound = soundUri;震动提示
long[] vibrates = {0, 1000, 1000, 1000}; notification.vibrate = vibrates;注意vibrate这个数组的偶数下标表示静止时长,奇数下标表示振动时长,本例则意味着立刻震动1秒,停止1秒,再震动1秒......
此外,振动需要声明权限
<uses-permission android:name="android.permission.VIBRATE" />控制LED灯
notification.ledARGB = Color.GREEN; notification.ledOnMS = 1000; notification.ledOffMS = 1000; notification.flags = Notification.FLAG_SHOW_LIGHTS;
ledARGB用于控制LED灯的颜色,一般有红绿蓝三种颜色可选。
ledOnMS用于指定LED灯亮起的时长,以毫秒为单位。
ledOffMS用于指定LED灯暗去的时长,也是以毫秒为单位。
flags用于指定通知的一些行为,其中就包括显示LED灯这一选项。
除了以上自定设置外,你也可以使用手机自带的默认设置
notification.defaults = Notification.DEFAULT_ALL;