8-1、Android 通知

本文详细介绍了Android 8.0及以后版本的通知渠道概念和创建方法,展示了如何创建和使用通知,实现通知点击效果,以及取消通知图标。此外,还探讨了通知的进阶技巧,包括setStyle()方法、通知声音和震动、以及通知渠道的等级管理。同时,针对程序未启动时获取通知和华为手机角标问题进行了讨论。
摘要由CSDN通过智能技术生成

一、通知渠道

1、什么是通知渠道

  • Android 8.0 开始引入了通知渠道的概念
  • 每条通知都要属于一个对应通知渠道
  • 每个应用都可以创建自己的通知渠道,但控制权在用户手上
  • 用户可以自由选择通知渠道的重要程度,以及关闭通知渠道
  • 通知渠道一经创建就不能再修改

以咸鱼为例,图中所示的就是咸鱼拥有的通知渠道。可以自由选择接收哪些渠道的通知。

2、创建通知渠道

(1)获取 NotificationManager对通知进行管理

// Context.getSystemService(),该方法接收一个字符串参数用于确定获取系统的哪个服务。
NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

(2)创建通知渠道

  • 第一步,构建通知渠道,传入三个参数
/**
 + 1、 构建通知渠道,传入三个参数
 + param channelId      渠道 Id,全局唯一即可
 + param channelName    渠道名称,显示给用户,需要清楚表达渠道的用途
 + param importance     通知的重要等级,不同的通知等级决定通知的不同行为,
 + 从高到底主要有 IMPORTANCE_HIGH、IMPORTANCE_DEFAULT、IMPORTANCE_LOW、IMPORTANCE_MIN这几种
 + 当然这里只是初始状态下的重要等级,用户可以随时手动更改某个通知渠道的重要等级,开发者是无法干预的。
  */
NotificationChannel notificationChannel = 
new NotificationChannel(channelId, channelName, importance);
  • 第二步,使用NotificationManager 创建通知渠道,传入第一步构建的渠道
// 2、创建通知渠道,传入第一步构建的渠道
manager.createNotificationChannel(notificationChannel);
  • 由于上述两个方法都是 Andorid 8.0 中新增的,因此使用这两个方法时应该进行版本判断,所以应该写成如下形式。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
   
    /**
     * 1、 构建通知渠道,传入三个参数
     * param channelId      渠道 Id,全局唯一即可
     * param channelName    渠道名称,显示给用户,需要清楚表达渠道的用途
     * param importance     通知的重要等级,不同的通知等级决定通知的不同行为,
     * 从高到底主要有 IMPORTANCE_HIGH、IMPORTANCE_DEFAULT、IMPORTANCE_LOW、IMPORTANCE_MIN这几种,
     * 当然这里只是初始状态下的重要等级,用户可以随时手动更改某个通知渠道的重要等级,开发者是无法干预的。
      */
    NotificationChannel notificationChannel 
    = new NotificationChannel(channelId, channelName, importance);
    // 2、创建通知渠道,传入第一步构建的渠道
    manager.createNotificationChannel(notificationChannel);
}

二、使用通知

1、创建的位置

  • Activity
  • BroadcastReceiver
  • Service

在 Activity 中创建的场景比较少,因为一般只有程序进入后台的时候才需要使用通知,但是创建通知整体步骤相同。

2、创建通知的步骤

(1)使用 Builder构造器来创建Notification对象

为了保证即使 Android 的版本变化了,原先的 API 也能正常工作,所以我们使用 AndroidX 库中提供的兼容 API,保证我们的程序在不同的版本上都能正常工作。

/**
 * 调用 AndroidX 中的兼容 API 方法,NotificationCompat.Builder()
 * param  context
 * param  channelId   渠道Id,需要和我们创建的渠道 Id 相匹配
  */
Notification notification = 
new NotificationCompat.Builder(context, channelId);
// 上述对象在调用最终的 build() 方法之前可以连缀任意多的设置方法来创建一个丰富的 Notification 对象
Notification notification = 
new NotificationCompat.Builder(context, channelId)
        // 指定通知的标题内容,下拉状态栏显示
        .setContentTitle("This is content title")
        // 指定通知的正文内容,下拉状态栏显示
        .setContentText("This is content text")
        // 设置通知的小图标,显示在状态栏上,只能使用纯 alpha 图层的图片
        .setSmallIcon(R.drawable.small_icon)
        // 设置通知的大图标,下拉状态栏显示
        .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.large_icon))
        .build();

(2)调用 NotificationManagernotify() 方法

/**
 * 调用 NotificationManager 的 notify() 方法就可以让通知显示出来了
 * param 参数 Id, 保证每个通知的 Id 都是不同的
 * param Notification 对象
 */
manager.notify(1, notification);

3、代码示例

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
   

    private NotificationManager mNotificationManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
   
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 1、创建通知管理器
        mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        // 2、创建通知渠道
        // 创建通知渠道的代码只有在第一次执行的时候会创建,当下次在执行创建代码时,
        // 系统会检测到该通知渠道已经存在,因此不会重复创建,不会影响运行效率。
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
   
            NotificationChannel channel = new NotificationChannel("normal", "Normal", NotificationManager.IMPORTANCE_DEFAULT);
            mNotificationManager.createNotificationChannel
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值