通知的基本用法和一些进阶技巧

来源:互联网 发布:门户源码 编辑:程序博客网 时间:2024/06/05 16:24
1.通知的基本用法

下面来学习一下创建通知的详细步骤:

首先需要一个NotificationManager来对通知进行管理,可以调用Context的getSystemService()方法获取到:

NotificationManager manager = (NotificationManager) getSystemService(Context.NoTIFICATION_SERVICE);

接下来需要使用一个Builder构造器来创建Notification对象,support-v4库中提供了一个NotificationCompat类

Notification notification = new NotificationCompat.Builder(context).build();

对Notification对象的一些基本的设置:

Notification notification = new NotificationCompat.Builder(Context)    .setContentTitle("This is content title") //用于指定通知的标题内容    .setContentText("This is content text") //用于指定通知的正文内容    .setWhen(System.currentTimeMillis()) //用于指定通知被创建的时间,以毫秒为单位    .setSmallIcon(R.drawable.small_icon) //用于设置通知的小图标    .setLargeIcon(BitmapFactory.decodeResource(getResource()),        R.drawable.large_icon) //用于设置通知的大图标    .build();

以上都完成之后,只需要调用NotificationManager的notify()方法就可以让通知显示出来了:

manager.notify(1, notification);

如何给通知添加点击效果呢,这就需要用到PendingIntent了,可以把PendingIntent简单的理解为延迟执行的Intent,它主要提供了几个静态方法用于获取PengingIntent的实例,可以更具需求来选择是使用getActivity()方法、getBroadcast()方法,还是getService()方法。

Intent intent = new Intent(this, NotificationActivity.class);PendingIntent pi = PendingIntent.getActivity(this, 0, intent, 0)...Notification notification = new NotificationCompat.Builder(Context)    ...    .setContentIntent(pi)    .build();manager.notify(1, notification);

如何做到当点击通知之后系统状态上的通知图标消失,
第一种写法:

.setAutoCancel(true) //当点击了这个通知的时候,通知会自动取消掉

第二种写法:

NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);manager.cancel(1); //参数是通知的id
2.通知的进阶技巧

NotificationCompat.Builder中提供了非常丰富的的API来让我们创建出更加多样的通知效果

在通知发出的时候播放一段音频:

.setSound(Uri.fromFile(new File("/system/media/audio/ringtones/Luna.ogg")))

在通知来的时候让手机进行振动:

.setVibrate(new long[] {0, 1000, 1000, 1000})

不过要想控制手机振动还需要声明权限

<mainfest xmlns:android="http://schemas.android.com/apk/res/android"    package="com.example.notificationtest"    android:versionCode="1"    android:versionName="1.0"    ...    <uses-permission android:name="android.permission.VIBRATE"/>    ...</manifest>

在通知来的时候让手机LED灯显示

.setLights(Color.GREEN, 1000, 1000)

也可以直接使用通知的默认效果,它会根据当前的手机环境来决定播放什么铃声,以及如何振动,写法如下:

.setDefaults(NotificationCompat.DEFAULT_ALL)