如何在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
相关产品推荐
相关产品推荐

