相比于广播接收器和服务,在活动里创建通知的场景还是比较少的,一般只有当程序进入到后台的时候我们才需要使用通知。但是无论在哪里创建通知,整体的步骤都是相同的。
NotificationManager manager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
由于几乎Android系统的每一个版本都会对通知这部分功能进行或多或少的修改,API稳定性的问题显得尤其严重,为了解决这个问题,可以使用support库中提供的兼容API。support-v4库中提供了一个NotificationCompat类,使用这个类的构造器来创建Notification对象,就可以保证我们的程序在所有Android系统的版本上都能正常工作。如下创建一个空的Notification对象:
Notification notification = new NotificationCompat.Builder(context).build();
常用更丰富的基本设置如下:
Notification notification = new NotificationCompat.Builder(context)
.setContentTitle("content title")
.setContentText("content text")
.setWhen(System.currentTimeMillis())
.setSmallIcon(R.drawable.small_icon)
.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.large_icon))
.build();
说明:setWhen()方法用于指定通知被创建的时间,以毫秒为单位,当下拉系统状态栏时,这里指定的时间会显示在相应的通知上
manager.notify(1, notification); //第一个参数id,确保每个通知不同
为响应通知的点击事件
Intent intent = new Intent(this, NotificationActivity.class);
PendingIntent pi = PendingIntent.getActivity(this, 0, intent, 0);
Notification notification = new NotificationCompat.Builder(context)
.set...
.setContentIntent(pi)
.build();
manager.notify(1, notification);
点击通知后该通知仍在系统状态栏显示,有两点方法可以解决点击通知后消失。
方法1:
Notification n = new NotificationCompat.Builder(this).setAutoCancel(true).build();
方法2:
PendingIntent跳转到的Activity中,onCreate()方法中添加:
NotificationManager manager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
manager.cancel(1); //参数为相应通知的id
在通知发出的时候播放一段音频:
Notification notification = new NotificationCompat.Builder(this)
.set...
.setSound(Uri.fromFile(new File("/../music.ogg")))
.build();
在通知发出的时候进行振动:
说明:参数为手机静止和振动时长,单位毫秒,下标0是静止时长,下标1是振动时长,下标2是静止时长,以此类推
Notification notification = new NotificationCompat.Builder(this)
.set...
.setVibrate(new long[]{0, 1000, 1000, 1000})
.build();
同时需要添加权限:
<uses-permission android:name="android.permission.VIBRATE"/>
在通知到来时控制手机LED灯的显示:
说明:参数1是LED灯的颜色,参数2是LED灯亮起的时长单位毫秒,参数3是LED灯暗去的时长单位毫秒,实现绿光一闪一闪的效果如下
Notification notification = new NotificationCompat.Builder(this)
.set...
.setLights(Color.GREEN, 1000, 1000)
.build();
默认效果设置
Notification notification = new NotificationCompat.Builder(this)
.set...
.setDefaults(NotificationCompat.DEFAULT_ALL)
.build();
在通知中显示一段长文字
Notification notification = new NotificationCompat.Builder(this)
.set...
.setStyle(new NotificationCompat.BigTextStyle().bigText("长文字内容"))
.build();
在通知里显示一张大图片
Notification notification = new NotificationCompat.Builder(this)
.set...
.setStyle(new NotificationCompat.BigPictureStyle().bigPicture
(BitmapFactory.decodeResource(getResources(), R.drawable.big_image)))
.build();
设置通知的重要程度,共5个常量可选即PRIORITY_DEFAULT, PRIORITY_MIN, PRIORITY_LOW, PRIORITY_HIGH, PRIORITY_MAX
Notification notification = new NotificationCompat.Builder(this)
.set...
.setPriority(NotificationCompat.PRIORITY_MAX)
.build();