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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 09:15:01