Android创建通知

简介

通知是指 Android 在应用的界面之外显示的消息,旨在向用户提供提醒、来自他人的通信信息或应用中的其他实时信息。用户可以点按通知来打开应用,也可以直接在通知中执行某项操作。
在android8.0之前,多个通知,无论是不是同一个一个应用的通知,逐个划分下来,占满了屏幕,不太友好。在8.0后加入了通知渠道,方便了对通知的管理。

初级使用

添加支持库

虽然使用 Android Studio 创建的大部分项目包含使用 NotificationCompat 所必需的依赖项,但您还是应该验证模块级 build.gradle 文件是否包含以下依赖项:

dependencies {
    
    
        implementation "com.android.support:support-compat:28.0.0"
    }
    

即当我们的NotificationCompat 不可用时,我们需要添加如上库,但一般的编译器的支持库中有 NotificationCompat的依赖,所以不用添加,比如Android stdio可不添加如上依赖库。

创建基本通知

最基本、精简形式(也称为折叠形式)的通知会显示一个图标、一个标题和少量内容文本。
在这里插入图片描述
1.创建NotificationManager对通知进行管理

//获取NotificationManager实例
NotificationManager manager = (NotificationManager) 
	getSystemService(Context.NOTIFICATION_SERVICE);

2.创建渠道并设置重要性
在 Android 8.0 及更高版本上使用通知,必须先通过向 createNotificationChannel() 传递 NotificationChannel 的实例在系统中注册应用的通知渠道

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
    
    
 //通知渠道的name,自己设定
 String name = getString(R.string.channel_name);
 //通知渠道的id
    String id = "my_channel_01";
    NotificationChannel channel = new NotificationChannel(name,id,
    NotificationManager.IMPORTANCE_DEFAULT);
    manager.createNotificationChannel(channel);
 }
参数 说明
id 通知渠道的ID,用户不可见,实例化Notification的时候需要用到
name 这个是方便用户管理通知用的,用户可见
重要性 渠道优先级

注:如果这个ID在实例化Notification的时候没有对应的上,通知栏无效,系统则将Toast放入一个错误*(软件不会闪退)*
3.设置通知内容
这里设置了一些列set方法可设置通知的各种参数

 Notification notification = new NotificationCompat.Builder(MainActivity.this,"my_channel_01")
       .setContentTitle("My notification")             //设置标题
       .setContentText("Hello World!")                 //设置正文
       .setWhen(System.currentTimeMillis())          //设置被创建的时间
       .setSmallIcon(R.mipmap.ic_launcher)             //设置通知的小图标
  	   .setAutoCancel(true)                            //点击时通知取消
  	   .setLargeIcon(BitmapFactory.decodeResource(getResources(),
  	   		R.mipmap.ic_launcher))    //设置通知的大图标
       .build();

4.设置点击事件
先用Intent表达出我们想要启动的活动的意图,然后再把构建好的Intent对象传到PendingIntent的getActivity中。

Intent intent = new Intent(MainActivity.this,MainActivity2.class);
 PendingIntent pi = PendingIntent.getActivity(MainActivity.this,0,intent,0);

在NotificationCompat.Builder中添加

.setContentIntent(pi)                           //设置通知点击

5.显示通知

 manager.notify(1,notification);

进阶用法

注意:NotificationChannel 的配置会覆盖 Notificaition.Builder 的配置在使用了 NotificationChannel 之后,关于震动、声音、呼吸灯的设置都需要在 NotificationChannel 中进行设置

1.设置声音,震动,呼吸灯等

 //配置通知出现时的闪灯(如果 android 设备支持的话)
channel.enableLights(true);
 //设置灯的颜色
 channel.setLightColor(Color.WHITE);
 channel.setVibrationPattern(new long[]{
    
    100, 200, 100, 200});     
    //设置震动
  //channel.setSound()                                                  
  //提供一个Uri,用于在通知发布到此频道时播放声音
 if( channel.canBypassDnd() ) //检测是否绕过免打扰模式
       channel.setBypassDnd(true); //设置绕过免打扰模式
 if(channel.getLockscreenVisibility()==Notification.VISIBILITY_PUBLIC){
    
    
       channel.setLockscreenVisibility(Notification.VISIBILITY_SECRET);
       //设置在锁屏界面上显示这条通知
 }

2.创建富文本通知内容
正常情况下通知内容如果长度太长,会自动压缩,可通过setStyle()来弥补这种缺陷,显示长文字

 .setStyle(new NotificationCompat.BigTextStyle().bigText("abcgfhkhhahhhwhjgjgjgjgjkagjgdguagdiawdyid"));

3.显示大图

.setStyle(new NotificationCompat.BigPictureStyle().bigPicture(
BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher)))

高阶使用

猜你喜欢

转载自blog.csdn.net/haazzz/article/details/108689720
今日推荐