通知的基本用法
创建通知步骤:
1.首先需要获取一个NotificationManager对象,用于管理通知,
调用getSystemService()方法获取,此方法接收一个字符串参数用于确定获取系统的哪一个服务。
NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
2.接着为通知创建一个通道
NotificationChannel channel = new NotificationChannel(id, "test", importance);
manager.createNotification(channel);
3.接下来使用NotificationCompat类的Builder构造器创建Notification对象,并设置属性。
Notification notification = new NotificationCompat.Builder(NotificationTest.this, id)//设置通知对象
//基础设置
.setContentTitle("天气预报")
.setContentText("晴天")
.setWhen(System.currentTimeMillis())
.setSmallIcon(R.drawable.fruit)
.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.fruit))
设置通知的点击事件:
首先使用Intent构建意图,然后将构建好的Intent对象传入getActivity()方法中,以得到PendingIntent实例,接着在NotificationCompat.Builder中调用setContentIntent()方法,把pendingIntent实例传入。
通过静态方法getActivity()、getBroadcast()、getService()获取,这三个方法接受四个参数,第一个Context,第二个传0,第三个intent,所以要创建intent对象,第四个参数用于确定PendingIntent的行为,一般传0。
//通知的点击事件
.setContentIntent(pending)//构建意图
.setAutoCancel(true)//点击通知之后自动消失
设置通知效果:
//设置通知效果
.setSound(Uri.fromFile(new File("音频文件路径")))//控制手机播放歌曲
.setVibrate(new long[]{0,1000,1000,1000})//控制手机震动,需要申请权限
.setDefaults(NotificationCompat.DEFAULT_ALL)//使用通知的默认效果
构建富文本信息,如长文字,图片
//长文本和大图片显示
.setStyle(new NotificationCompat.BigTextStyle().bigText("窝是嫩叠窝是嫩叠窝是嫩叠窝是嫩叠窝是嫩叠" +
"窝是嫩叠窝是嫩叠窝是嫩叠窝是嫩叠窝是嫩叠窝是嫩叠窝是嫩叠窝是嫩叠窝是嫩叠窝是嫩叠窝是嫩叠窝是嫩叠窝是嫩叠" +
"窝是嫩叠窝是嫩叠窝是嫩叠窝是嫩叠窝是嫩叠窝是嫩叠窝是嫩叠窝是嫩叠窝是嫩叠"))
.setStyle(new NotificationCompat.BigPictureStyle().bigPicture(
BitmapFactory.decodeResource(getResources(), R.drawable.fruit)))
设置重要程度:
//设置重要程度
.setPriority(NotificationCompat.PRIORITY_MAX)
.build();
简单实现通知示例:
public class NotificationTest extends AppCompatActivity {
private String id = "channel_1";
@RequiresApi(api = Build.VERSION_CODES.O)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_notification_test);
Intent intent = new Intent(this, RecyclerView.class);//为通知设置点击事件
PendingIntent pending = PendingIntent.getActivity(this, 0, intent, 0);
Button sendButton = (Button) findViewById(R.id.send_notice);
sendButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);//获取通知管理对象
NotificationChannel channel = new NotificationChannel(id, "test", NotificationManager.IMPORTANCE_HIGH);//创建通知通道
manager.createNotificationChannel(channel);//设置通道到管理中
Notification notification = new NotificationCompat.Builder(NotificationTest.this, id)//设置通知对象
.setContentTitle("天气预报")
.setContentText("晴天")
.setWhen(System.currentTimeMillis())
.setSmallIcon(R.drawable.fruit)
.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.fruit))
.setContentIntent(pending)//构建意图
.setAutoCancel(true)//点击通知之后自动消失
//设置通知效果
.setSound(Uri.fromFile(new File("音频文件路径")))//控制手机播放歌曲
.setVibrate(new long[]{0,1000,1000,1000})//控制手机震动,需要申请权限
.setDefaults(NotificationCompat.DEFAULT_ALL)//使用通知的默认效果
.setStyle(new NotificationCompat.BigTextStyle().bigText("啦啦啦啦啦啦啦"+
"啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦"+
"啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦"+
"啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦啦"))
.setStyle(new NotificationCompat.BigPictureStyle().bigPicture(
BitmapFactory.decodeResource(getResources(), R.drawable.fruit)))
.setPriority(NotificationCompat.PRIORITY_MAX)
.build();
manager.notify(1, notification);//显示通知
}
});
}
}