Android/Kotlin开发:如何为设备上其他应用的图标添加角标
技术回答:Android/Kotlin实现第三方应用图标角标修改
可以实现,但受Android系统碎片化影响,不存在全机型通用的无权限实现方案,需针对不同厂商ROM做适配。
实现前提与限制
- 原生AOSP Android没有提供公开API允许第三方应用修改其他应用的角标,类原生ROM(如Pixel、LineageOS)无法实现该功能,除非你自行开发桌面Launcher替代系统默认桌面。
- 国产主流厂商(小米、华为、OPPO、vivo等)的定制ROM大多开放了第三方角标设置接口,只需申请对应权限即可调用。
核心实现方案
1. 厂商公开API适配(无需Root/系统权限)
首先在AndroidManifest.xml中申请各厂商对应的角标权限:
<!-- 华为角标权限 --> <uses-permission android:name="com.huawei.android.launcher.permission.CHANGE_BADGE" /> <!-- 小米角标权限 --> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="miui.permission.READ_LOGS" /> <!-- OPPO角标权限 --> <uses-permission android:name="com.oppo.launcher.permission.READ_SETTINGS" /> <uses-permission android:name="com.oppo.launcher.permission.WRITE_SETTINGS" />
然后通过Kotlin实现适配不同厂商的角标设置工具方法,示例代码如下:
fun setThirdAppBadge(context: Context, targetPackageName: String, targetLauncherClass: String, badgeCount: Int) { when (Build.MANUFACTURER.lowercase(Locale.getDefault())) { "xiaomi" -> { Intent("android.intent.action.APPLICATION_MESSAGE_UPDATE").apply { putExtra("android.intent.extra.update_application_component_name", "$targetPackageName/$targetLauncherClass") putExtra("android.intent.extra.update_application_message_text", badgeCount.takeIf { it > 0 }?.toString() ?: "") context.sendBroadcast(this) } } "huawei" -> { val bundle = Bundle().apply { putString("package", targetPackageName) putString("class", targetLauncherClass) putInt("badgenumber", badgeCount) } context.contentResolver.call( Uri.parse("content://com.huawei.android.launcher.settings/badge/"), "change_badge", null, bundle ) } "oppo" -> { val bundle = Bundle().apply { putInt("app_badge_count", badgeCount) putString("app_badge_packageName", targetPackageName) putBoolean("app_badge_is_show_badge", badgeCount > 0) } context.contentResolver.call( Uri.parse("content://com.oppo.badge.BadgeProvider/"), "update_badge", null, bundle ) } } }
调用时只需要传入目标应用的包名、启动页Activity全类名、需要展示的角标数量即可。
2. 系统级权限实现(适配所有ROM)
如果你的应用是系统预装应用,或者获取了Root权限,可以直接操作系统Launcher的ContentProvider数据,直接修改任意应用的角标数值,该方案适配性更高但适用场景有限。
注意事项
- 部分厂商新版本ROM已经收紧了第三方修改其他应用角标的权限,需要引导用户手动在应用设置中开启对应角标权限后才能生效。
- 当角标数量设置为0时,即可隐藏目标应用的角标。
内容的提问来源于stack exchange,提问作者Amit kumar dogra
相关产品推荐
相关产品推荐

