8.1 使用通知(Notification)

来源:互联网 发布:benaughty 知乎 编辑:程序博客网 时间:2024/05/07 05:53

8.1.1 通知的基本用法

     通知既可以在活动里创建,也可以在广播接收器里创建,也可以服务里创建。相比广播接收器和服务,在活动里创建通知的场景还是比较少的,因为一般只有当程序进入后台的时候才需要使用通知。但创建通知的整体步骤基本相同。

1. NotificationManager
首先需要一个NotificationManager来对通知进行管理,可以使用ContextgetSystemService()方法获取到。
getSystemService()方法接收一个字符串参数用于确定获取系统的那个服务,这里传入Context.NOTIFICATION_SERVICE,即可。
NotificationManager的实例就可以写成:

NotificationManager manager = (NotificatonManager)   getSystemService(Context.NOTIFICATION_SERVICE);

2. 创建一个Notification对象

Notification.Builder builder = new Notification.Builder(MainActivity.this);builder.setSmallIcon(R.drawable.ic_launcher); //设置图标                 builder.setContentTitle("通知"); //设置标题                 builder.setContentText("点击查看详细内容"); //消息内容                 builder.setWhen(System.currentTimeMillis()); //发送时间

3. 让通知显示→notify() 方法
调用NotificationManagernotify()方法可以让通知显示出来

manager.notify(1, builder.build());

notify()方法接收两个参数,第一个参数是id,要保证为每个通知所指定的id都是不同的。第二个参数则是Notification对象。

4. 实现通知可点击(PendingIntent
PendingIntentIntent都可以用于启动活动、启动服务以及发送广播等,但Intent更倾向于立即去执行某个动作,而PendingIntent则倾向于在某个合适的时机去执行某个动作。
PendingIntent主要提供了几个静态方法用于获取PendingIntent的实例,可以根据需求选择使用getActivity()方法、getBroadcast()方法、还是getService()方法。这几个方法所接收的参数都是相同的:
第一个是Context
第二个参数一般用不到,通常都是传入0即可。
第三个参数是一个Intent对象,我们可以通过这个对象构建出PendingIntent的行为,有FLAG_ONE_SHOTFLAG_NO_CREATEFLAG_CANCEL_CURRENTFLAG_UPDATE_CURRENT四种值可选。

给通知加入点击功能:

Intent intent = new Intent(MainActivity.this, NotificationActivity.class);PendingIntent pi = PendingIntent.getActivity(this, 0, intent, PendingIntent.FlAG_CANCEL_CURRENT);builder.SetContentIntent(pi);

让通知栏的图标消失:
调用NotificationManagercancel()方法就可以取消通知了。

NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);manager.cancel(1);

想要取消那一条通知,就在cancel()中传入相应的id即可。

8.1.2 通知的高级技巧

1. 收到通知时响铃

Uri soundUri = Uri.fromFile(new File("/system/media/audio/alarms/Beep.ogg")); //builder.setSound(soundUri); //在通知发出时播放音频

2. 收到通知时震动
这里使用的是vibrate这个属性。它是一个长整型数组,用于设置手机静止和振动的时长,以毫秒为单位(1s = 1000ms )。下标为0的值表示手机静止的时长,下标为1表示振动的时长,下表为2又表示静止的时长,以此类推。

long[] vibrates = {0, 1000, 1000, 1000}; //立刻振动1s,再静止1s,再振动1sbuilder.setVibrate(vibrates); //让手机振动

3. 控制LED灯
通过Notification.BuildersetLights(int argb, int onMs, int offMs)方法实现,三个参数分别代表呼吸灯的颜色、呼吸灯亮起的时长、呼吸灯熄灭的时长。

builder.setLights(color.RED, 1000, 1000);

如果不需要进行那么多复杂的设置,可以直接使用通知的默认效果,他会根据当前手机的环境来决定播放什么铃声以及如何振动:

builder.setDefaults(Notification.DEFAULT_ALL);
0 0
原创粉丝点击