通知(Notification)是Android系统中比较有特色的一个功能,当某个应用程序希望向用户发出一些提示信息,而该应用程序又不在前台运行时,就可以借助通知来实现。发出一条通知后,手机最上方的状态栏中会显示一个通知的图标,下拉状态栏后可以看到通知的详细内容。
通过NotificationManager来对通知进行管理,可以调用Context的getSystemService()
方法获取到。getSystemService()
方法接收一个字符串参数用于确定获取系统的哪个服务,这里我们传入Context.NOTIFICATION_SERVICE
即可。接下来需要使用一个Builder构造器来创建Notification
对象,相关内容
1,标题 2,文本 3,方法用于指定通知被创建的时间,以毫秒为单位,当下拉系统状态栏时,这里指定的时间会显示在相应的通知上 4,在系统状态栏的小图标 5,下拉时显示的大图标 6.相应点击事件 7,使手机震动(点击后多少毫秒开始,静止时间,震动时间)可叠加。但需要声明权限。 8,播放音频,每个手机的/system/media/audio/ringtones目录下都有很多的音频文件
9,关闭显屏时的Led闪烁,(颜色,静止时间,闪烁时间)。10.点击通知后通知会从通知栏消失会消失 11.创建
notify(id,Notification).显示
Notification notification = new NotificationCompat.Builder(MainActivity.this,channeId)
.setContentTitle("This is content title")
.setContentText("This is content text")
.setWhen(System.currentTimeMillis())
.setSmallIcon(R.mipmap.ic_launcher)
.setLargeIcon(BitmapFactory.decodeResource(getResources(),
R.mipmap.ic_launcher))
.setContentIntent(pi)
.setVibrate(new long[] {0, 1000, 1000, 1000,2000,1000,2000 })
.setSound(Uri.fromFile(new File("/system/media/audio/ringtones/Hello_Ya.ogg")))
.setLights(Color.BLACK, 1000, 1000)
.setAutoCancel(true)
.build();
manager.notify(1, notification);
点击通知栏打出点击事件是通过PendingIntent,PendingIntent的用法同样很简单,它主要提供了几个静态方法用于获取PendingIntent的实例,可以根据需求来选择是使用getActivity()
方法、getBroadcast()
方法,还是getService()
方法。这几个方法所接收的参数都是相同的,第一个参数依旧是Context
,不用多做解释。第二个参数一般用不到,通常都是传入0即可。第三个参数是一个Intent
对象,我们可以通过这个对象构建出PendingIntent的“意图”。第四个参数用于确定PendingIntent的行为,有FLAG_ONE_SHOT
、FLAG_NO_CREATE
、FLAG_CANCEL_CURRENT
和FLAG_UPDATE_CURRENT
这4种值可选,每种值的具体含义你可以查看文档,通常情况下这个参数传入0就可以了。构造器还可以再连缀一个setContentIntent()
方法,接收的参数正是一个PendingIntent
对象。因此,这里就可以通过PendingIntent构建出一个延迟执行的“意图”,当用户点击这条通知时就会执行相应的逻辑。
public class MainActivity extends AppCompatActivity {
private String channeId;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent=new Intent(MainActivity.this,Main2Activity.class);
PendingIntent pi = PendingIntent.getActivity(MainActivity.this, 0, intent, 0);
NotificationManager manager = (NotificationManager) getSystemService
(NOTIFICATION_SERVICE);
Notification notification = new NotificationCompat.Builder(MainActivity.this,channeId)
.setContentTitle("This is content title")
.setContentText("This is content text")
.setWhen(System.currentTimeMillis())
.setSmallIcon(R.mipmap.ic_launcher)
.setLargeIcon(BitmapFactory.decodeResource(getResources(),
R.mipmap.ic_launcher))
.setContentIntent(pi)
.setVibrate(new long[] {0, 1000, 1000, 1000,2000,1000,2000 })
.setSound(Uri.fromFile(new File("/system/media/audio/ringtones/Hello_Ya.ogg")))
.setLights(Color.BLACK, 1000, 1000)
.setAutoCancel(true)
.build();
manager.notify(1, notification);
}
});
}
}
高级特性
setStyle()
这个方法允许我们构建出富文本的通知内容。也就是说通知中不光可以有文字和图标,还可以包含更多的东西。setStyle()
方法接收一个NotificationCompat.Style
参数,这个参数就是用来构建具体的富文本信息的,如长文字、图片等。
.setStyle(new NotificationCompat.BigTextStyle().bigText("Learn how to build
notifications, send and sync data, and use voice actions. Get the official
Android IDE and developer tools to build apps for Android."))
合理化显示长文本
.setStyle(new NotificationCompat.BigPictureStyle().bigPicture
(BitmapFactory.decodeResource(getResources(), R.drawable.big_image)))
显示图片
setPriority()
方法,它可以用于设置通知的重要程度。RIORITY_DEFAULT
表示默认的重要程度,和不设置效果是一样的;PRIORITY_MIN
表示最低的重要程度,系统可能只会在特定的场景才显示这条通知,比如用户下拉状态栏的时候;PRIORITY_LOW
表示较低的重要程度,系统可能会将这类通知缩小,或改变其显示的顺序,将其排在更重要的通知之后;PRIORITY_HIGH
表示较高的重要程度,系统可能会将这类通知放大,或改变其显示的顺序,将其排在比较靠前的位置;PRIORITY_MAX
表示最高的重要程度,这类通知消息必须要让用户立刻看到,甚至需要用户做出响应操作。
.setPriority(NotificationCompat.PRIORITY_MAX)