1.使用通知
1.1 创建一个通知
-
第一步:获得NotificationManager对象来对通知进行管理。
可以调用Context的getSystemService()方法获取。该方法接收一个字符串参数,用于确定获取哪个系统服务,获取通知传入
Context.NOTIFICATION_SERVICE
- 代码如下:
//创建一个NotificationManager对象 NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
-
第二步:创建一个Notification对象
使用一个Builder构造器来创建一个Notification对象。
//创建Notification
Notification notification = new NotificationCompat.Builder(MainActivity.this)
.setContentTitle("这是通知内容标题")
.setContentText("正式通知内容")
.setWhen(System.currentTimeMillis())
.setSmallIcon(R.mipmap.ic_launcher)
.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher))
.build();
- 第三步:显示通知
调用NotificationManager的notify()方法可以让通知显示出来,该方法接收两个参数,第一个是id,保证每个通知指定的id都是不同的,第二个是要显示的Notification对象
manager.notify(1, notification);
- 完整代码如下
sendNotice = (Button) findViewById(R.id.send_notification);
sendNotice.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//获得NotificationManager对象
NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
//创建Notification
Notification notification = new NotificationCompat.Builder(MainActivity.this)
.setContentTitle("这是通知内容标题")
.setContentText("正式通知内容")
.setWhen(System.currentTimeMillis())
.setSmallIcon(R.mipmap.ic_launcher)
.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher))
.build();
//发送通知
manager.notify(1, notification);
}
});
1.2实现通知的点击功能
使用PendingIntent可以实现这一功能。PendingIntent和Intent类似,但是PendingIntent更加倾向于在某个合适的时机去执行某个某个动作,而Intent更加倾向于立即执行某个动作。
1.2.1PendingIntent的用法
- PendingIntent提供了几个静态方法用于获取PendingIntent的实例:
getActivity()
、getBroadcast()
、getService()
。
- 这几个静态方法接受的参数都是相同的:
- 第一个是Context
- 第二个一般用不到,通常传0即可。
- 第三个是一个Intent对象
- 第四个是用于确定PendingIntent的行为
- 完整代码如下
//初始化Intent
Intent intent = new Intent(MainActivity.this, NotificationActivity.class);
//使用Intent获得PendingIntent对象
PendingIntent pi = PendingIntent.getActivity(MainActivity.this, 0, intent, 0);
NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
Notification notification = new NotificationCompat.Builder(MainActivity.this)
.setContentTitle("这是通知内容标题")
.setContentText("正式通知内容")
.setWhen(System.currentTimeMillis())
.setSmallIcon(R.mipmap.ic_launcher)
.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher))
//设置PendingIntent
.setContentIntent(pi)
.build();
//显示通知
manager.notify(1,notification);
}
1.3实现点击通知之后删除通知的功能
实现这个功能有两种方法,
- 第一种是在实例化notification时setAutoCancel传入true。
Notification notification = new NotificationCompat.Builder(MainActivity.this)
.setContentTitle("这是通知内容标题")
.setContentText("正式通知内容")
.setWhen(System.currentTimeMillis())
.setSmallIcon(R.mipmap.ic_launcher)
.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher))
//设置PendingIntent
.setContentIntent(pi)
//设置点击通知时删除通知
.setAutoCancel(true)
.build();
- 第二种是显示的调用NotificationManager的cancel()方法将它取消,这个方法接收通知的id用于指定取消哪个通知
//获得NotificationManager对象
NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
//取消id为1的通知
manager.cancel(1);
2.通知的高级功能
2.1通知发出时播放音频
使用setSound()方法,接收一个Uri参数,指定通知发出时要播放的音频
Notification notification = new NotificationCompat.Builder(MainActivity.this)
.setContentTitle("这是通知内容标题")
.setContentText("正式通知内容")
.setWhen(System.currentTimeMillis())
.setSmallIcon(R.mipmap.ic_launcher)
.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher))
//设置PendingIntent
.setContentIntent(pi)
//设置点击通知时删除通知
.setAutoCancel(true)
//播放音频
.setSound(Uri.fromFile(new File("/system/media/audio/ringtones/Luna.ogg")))
.build();
2.2通知发出时手机振动
使用setVibrate()方法,接收一个virbrate参数,它是一个长整型数组,用于设置手机静止和振动的时长。下标为0的值表示手机静止的时长,下标为1的值表示手机振动时长,下标为2的值表示手机静止的时长。
Notification notification = new NotificationCompat.Builder(MainActivity.this)
.setContentTitle("这是通知内容标题")
.setContentText("正式通知内容")
.setWhen(System.currentTimeMillis())
.setSmallIcon(R.mipmap.ic_launcher)
.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher))
//设置PendingIntent
.setContentIntent(pi)
//设置点击通知时删除通知
.setAutoCancel(true)
//播放音频
.setSound(Uri.fromFile(new File("/system/media/audio/ringtones/Luna.ogg")))
//设置手机接收到通知时立刻振动1秒,静止1秒,再振动一秒
.setVibrate(new long[] {0, 1000, 1000, 1000})
.build();
注意:使用手机的震动功能还需在AndroidManifest.xml文件中添加权限声明
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.anwser_mac.notificationtest">
//声明权限
<uses-permission android:name="android.permission.VIBRATE"/>
2.3 实现通知未读时LED灯闪烁
Notification notification = new NotificationCompat.Builder(MainActivity.this)
.setContentTitle("这是通知内容标题")
.setContentText("正式通知内容")
.setWhen(System.currentTimeMillis())
.setSmallIcon(R.mipmap.ic_launcher)
.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher))
//设置PendingIntent
.setContentIntent(pi)
//设置点击通知时删除通知
.setAutoCancel(true)
//播放音频
.setSound(Uri.fromFile(new File("/system/media/audio/ringtones/Luna.ogg")))
//设置手机接收到通知时立刻振动1秒,静止1秒,再振动一秒
.setVibrate(new long[] {0, 1000, 1000, 1000})
//设置LED灯,绿色闪烁
.setLights(Color.GREEN, 1000, 1000)
.build();
-
注:如果不想进行这么繁杂设置,可以直接使用通知的默认效果,它会根据手机环境来决定播放什么铃声,及如何振动等
Notification notification = new NotificationCompat.Builder(this) .setDefaults(NotificationCompat.DEFAULT_ALL) .build();
2.4设置通知显示长文本内容,超出范围自动换行
在setStyle方法中创建一个NotificationCompat.BigTextStyle对象,然后调用该对象的bigText方法
.setStyle(new NotificationCompat.BigTextStyle().bigText("hhhhhhhhhhhhhhhhhhhhhhhhhhhhzheshi 一段很长长的文本"))
2.5设置通知显示一张大图
具体用法跟2.4类似,但是这次创建的是一个NotificationCompat.BitPictureStyle对象。
.setStyle(new NotificationCompat.BigPictureStyle().bigPicture(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher_round)))
2.6设置通知的重要程度
调用setPriority()方法来设置通知的重要程度,分为5歌级别
- PRIORITY_DEFAULT : 表示默认程度,和不设置的效果一样。
- PRIORITY_MIN :最低的重要程度,系统可能只会在特定的场景才会显示这条通知,比如用户下拉状态栏的时候。
- PRIORITY_LOW : 较低的重要程度,系统可能会降这类通知缩小,或改变其显示的顺序
- PRIORITY_HIGHT : 较高的重要程度,系统可能会将这类通知放大,或改变其显示的顺序,将其排在比较靠前的位置。
- PRIORITY_MAX : 最高的重要程度,这类通知消息必须要让用户立即看到,甚至需要用户做出相应操作。
- 具体写法如下:
setPriority(NotificationCompat.PRIORITY_MAX)
2017-04-13_11-58-07.gif
网友评论