Android提供了对通知的定制,如设置通知的震动、声音、设置通知的显示样式、设置在通知栏中的更新进度等。
相关属性值和常量。
属性 defaults :Notification类中表示声音的属性
常用常量:
1、DEFAULT_SOUND 声音
2、DEFAULT_ALL 使用所有默认值
EG: notification.defaults |= Notification.DEFAULT_ALL; 表示震动声音等全部使用默认值
3、DEFAULT_LIGHTS 闪光
属性vibrate :Notification类中表示震动的属性
注意:手机震动需要加入权限:
<uses-permission android:name=
"android.permission.VIBRATE"
/>
设置flag的常量:
FLAG_AUTO_CANCEL 该通知能被状态栏的清除按钮给清除掉
FLAG_NO_CLEAR 该通知不能被清除掉
FLAG_ONGOING_EVENT 通知放置在正在运行
FLAG_INSISTENT 是否一直进行,比如音乐一直播放,知道用户响应
效果属性可以叠加,如设置震动效果:
notification.defaults |= Notification.DEFAULT_VIBRATE; /**因为defaults属性中可能还有别的值,为保留之前的值,并添加震动效果,使用|= 来操作。*/ notification.vibrate = new long[]{0,100,200,300}; /**这个数组定义了交替的震动和关闭,以毫秒为单位。第一个值是等待多久开始震动,第二个值是第一次震动的时间,第三个值是停止震动的时间,以此类推。定义多长时间都行,但是不能设置为重复。*/
自定义声音:
notification.sound = Uri.parse("file:///sdcard/notification/qq.mp3");
自定义闪光方式:
// 定义闪光灯 // 路灯显示300毫秒然后关闭一分钟。如果设备不支持制定的颜色,则会按照最近的颜色显示。 mNoti.ledARGB = 0xff00ff00; mNoti.ledOnMS = 300; mNoti.ledOffMS = 1000; mNoti.flags |= Notification.FLAG_SHOW_LIGHTS;
下面来看一个简单的Notification案例:
当点击Button,发送通知消息:
步骤1:定义NotificationManager和Notification对象
//创建通知管理器,该对象的作用是负责状态栏通知的管理,负责发通知、清除通知等 NotificationManager mNotiManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); //创建通知对象 // param1:通知来时状态条显示的图标 // param2:通知来时状态条显示的通知说明文字 // param1:通知来时的时间 Notification notification = new Notification(R.drawable.icon,"通知来了",System.currentTimeMillis());
步骤2:创建Intent对象,并指定通知的目标组件,示例代码。
// 设置目标组件,点击通知后跳转的Activity Intent intent = new Intent(this, MainActivity.class);
步骤3:创建PendingIntent对象,设置随时更新通知(Param4)
// 创建PendingIntent对象,设置通知随时更新 // 其作用是是定义了一个不是当即显示的activity,只有当用户拉下notification显示列表,并且单击对应的项的时候,才会触发系统跳转到该activity. PendingIntent pIntent = PendingIntent.getActivity(this, 1, intent, PendingIntent.FLAG_UPDATE_CURRENT);
步骤4:设置contentIntent属性为pIntent.
notification.contentIntent = pIntent;
步骤4:设置通知来的显示样式:
notification.defaults = Notification.DEFAULT_ALL;
步骤5:在此处设置在nority列表里的该norifycation得显示情况。
notification.setLatestEventInfo(this, "lydia微博客户端更新通知", "请下载lydia微博客服端", pIntent);
步骤6: 发送通知
mNotiManager.notify(R.id.btn1, notification);
效果: