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

如何在Android Studio中修改Poco及小米设备(如Poco X3 NFC)应用角标计数?

小米/Poco设备应用角标不生效的解决方案

针对你使用ShortcutBadger库在小米(含Poco X3 NFC)设备上角标不生效的问题,核心原因是MIUI的角标机制与其他品牌差异较大,需要单独适配,以下是具体解决步骤:

1. 修正代码基础错误

你的代码存在两处语法错误,先修正:

  • 方法名错误:ShortcutBadger.applicant 应为 ShortcutBadger.applyCount
  • 参数名错误:int badge count 应为 int badgeCount(变量名不允许包含空格)

2. 添加小米专属权限

在AndroidManifest.xml中补充小米桌面及相关权限:

<!-- 小米桌面角标读写权限 -->
<uses-permission android:name="com.miui.launcher.permission.READ_SETTINGS" />
<uses-permission android:name="com.miui.launcher.permission.WRITE_SETTINGS" />
<!-- 小米推送权限(部分MIUI版本依赖) -->
<uses-permission android:name="com.xiaomi.mipush.permission.MIPUSH_RECEIVE" />
<uses-permission android:name="com.xiaomi.mipush.permission.MIPUSH_SEND" />

3. 适配小米设备的角标逻辑

修改NotificationModule类,添加小米设备专属的角标更新逻辑,通过发送系统广播的方式实现:

package com.jkit.smartoffice;

import static io.invertase.firebase.app.ReactNativeFirebaseApp.getApplicationContext;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;

import android.content.Intent;
import android.content.pm.PackageManager;
import me.lanolin.shortcutbadger.ShortcutBadger;

public class NotificationModule extends ReactContextBaseJavaModule {

    public NotificationModule(ReactApplicationContext reactContext) {
        super(reactContext);
    }

    @Override
    public String getName() {
        return "Notification";
    }

    @ReactMethod
    public void setBadge(int badgeCount) {
        try {
            // 通用方法兼容三星、索尼等品牌
            ShortcutBadger.applyCount(getApplicationContext(), badgeCount);
            // 针对小米设备单独处理
            if (isMiuiDevice()) {
                setMiuiBadge(badgeCount);
            }
        } catch (Exception e) {
            e.printStackTrace(); // 保留异常日志,方便调试排查
        }
    }

    @ReactMethod
    public void removeBadge() {
        try {
            ShortcutBadger.removeCount(getApplicationContext());
            if (isMiuiDevice()) {
                setMiuiBadge(0);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    // 判断当前设备是否为小米(含Poco)设备
    private boolean isMiuiDevice() {
        return "Xiaomi".equalsIgnoreCase(android.os.Build.MANUFACTURER);
    }

    // 小米设备专属角标设置方法
    private void setMiuiBadge(int badgeCount) {
        Intent updateIntent = new Intent("android.intent.action.APPLICATION_MESSAGE_UPDATE");
        // 传入应用包名+启动Activity类名
        String componentName = getApplicationContext().getPackageName() + "/" + getLauncherActivityName();
        updateIntent.putExtra("android.intent.extra.update_application_component_name", componentName);
        updateIntent.putExtra("android.intent.extra.update_application_message_text", String.valueOf(badgeCount));
        getApplicationContext().sendBroadcast(updateIntent);
    }

    // 获取应用的启动Activity类名
    private String getLauncherActivityName() {
        PackageManager pm = getApplicationContext().getPackageManager();
        Intent launchIntent = pm.getLaunchIntentForPackage(getApplicationContext().getPackageName());
        if (launchIntent != null && launchIntent.getComponent() != null) {
            return launchIntent.getComponent().getClassName();
        }
        return "";
    }
}

4. 检查设备系统设置

确保你的应用在小米设备的系统设置中开启以下权限:

  • 进入「设置 → 通知与控制中心 → 通知管理」,找到你的应用,开启「允许通知」
  • 在同一页面开启「应用图标角标」选项

内容的提问来源于stack exchange,提问作者Sandeep Vithanage

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 05:05:08