You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native安卓端如何在通知清除后持久显示应用角标计数?

在React Native安卓上持久显示应用角标的解决方案

安卓系统本身没有统一的应用角标标准,不同厂商(小米、华为、OPPO、vivo等)都有各自的私有API来实现角标,而setApplicationIconBadgeNumber本质上是依赖系统通知的关联计数,一旦通知被清除,角标就会跟着消失。要实现不依赖通知的持久角标,需要针对不同厂商适配私有API,并手动维护计数。

核心思路

  1. 脱离系统通知关联:直接调用厂商私有API设置角标,不与通知绑定
  2. 持久化存储计数:把角标计数存在本地(如AsyncStorage/MMKV),确保应用重启或通知清除后能恢复
  3. 适配多厂商:借助第三方库封装不同厂商的实现,减少原生代码开发

具体实现步骤

1. 使用第三方角标库

推荐使用react-native-badge-library,它封装了主流安卓厂商的角标API:

# 安装库
npm install react-native-badge-library
# 或
yarn add react-native-badge-library

2. 持久化维护计数

用MMKV(性能优于AsyncStorage)存储当前角标计数:

import MMKVStorage from 'react-native-mmkv-storage';
import { BadgeLibrary } from 'react-native-badge-library';

// 初始化MMKV
const storage = new MMKVStorage.Loader().initialize();

// 更新角标并存储计数
const updateBadgeCount = async (count) => {
  // 存储计数到本地
  await storage.setNumber('badgeCount', count);
  // 调用库设置角标
  await BadgeLibrary.setBadgeCount(count);
};

// 应用启动时恢复角标
const restoreBadgeCount = async () => {
  const count = await storage.getNumber('badgeCount', 0);
  await BadgeLibrary.setBadgeCount(count);
};

// 在App组件的useEffect中调用恢复
useEffect(() => {
  restoreBadgeCount();
}, []);

3. 处理厂商权限

部分厂商需要特定权限才能设置角标:

  • 小米/红米:需要开启「通知使用权」权限,可引导用户到系统设置开启
  • 华为/荣耀:库已自动配置com.huawei.android.launcher.permission.CHANGE_BADGE权限
  • OPPO/vivo:需要在应用设置中开启「应用角标」权限

可在应用首次启动时添加权限引导:

const checkBadgePermission = async () => {
  const hasPermission = await BadgeLibrary.hasPermission();
  if (!hasPermission) {
    // 引导用户开启权限
    await BadgeLibrary.requestPermission();
  }
};

4. 避免通知清除影响

因为我们是直接调用厂商API设置角标,没有绑定系统通知,所以即使所有通知被清除,角标依然会保留。只有当主动调用updateBadgeCount(0)时,角标才会消失。

注意事项

  • 部分安卓版本或厂商可能不支持角标,需做降级处理(比如提示用户设备不支持)
  • 测试时要覆盖主流厂商设备,确保各机型都能正常显示
  • 完全用第三方库的API替代setApplicationIconBadgeNumber,避免依赖系统通知关联

内容的提问来源于stack exchange,提问作者Adnan Ashraf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 19:16:19