【问题标题】:How does Facebook add badge numbers on app icon in Android?Facebook 如何在 Android 中的应用图标上添加徽章编号?
【发布时间】:2026-01-11 11:00:01
【问题描述】:

我知道这里有几个 Q 询问是否可以将徽章添加到 android 应用程序,他们都以 NO 回答结束...

但不知何故,最新的 Android 版 Facebook 测试版 seems to do something which at least look like a badge 即使在技术上并不完全如此。

在那篇文章中,一位评论者说它与 TouchWiz 有某种关系。 also here they 提到它是“S3 TouchWiz Jelly Bean Addon”的一个功能。

我仍然希望了解如何做到这一点以及是否有一些 API 可以在我自己的应用程序中使用(在适当的环境中运行时 - 即 FB 演示此行为的同一设备)?

【问题讨论】:

  • @Waza_Be 所有这些 Q 似乎无关紧要。我不是在问如何做到这一点或是否可以做到。我想知道它是怎么做的。不仅如此,而且大多数其他 Q 的答案都以无法完成的回答结束。 (也许他们需要更新)。无论如何 - 我想知道我在新的 FB 应用程序中看到了什么以及它是如何工作的......
  • @bill-the-lizard - 我不确定我是否理解题外话的原因,也不知道为什么我没有得到分数...许多人希望能够实现显示数字徽章的目标在 android 应用程序的应用程序图标上。某些应用程序 (FB) 显示出这种行为的事实让我有理由相信,也许有人可以解释他们是如何做到的,并可能让我在我的应用程序上实现类似的效果。我将在 Q 的文本中进行编辑以澄清其中的一些内容。
  • @bill-the-lizard 将此作为离题关闭是一个糟糕的电话。 TouchWiz 显然是 Android 的一个相关部分,尽管它不是“纯”Android。是的,此功能仅限于选定的开发人员,但它显然不是题外话。
  • 这在股票 android 上可用。我不知道怎么做。我不知道为什么..但我现在正在查看我的 facebook 应用程序图标上的徽章,在股票 android 上,在 Xperia Z 上运行,这个问题应该没有解决
  • 我在这里写了一个操作方法*.com/questions/20136483/…

标签: java android facebook badge android-launcher


【解决方案1】:

您好,您可以简单地使用这个库。

支持:索尼、三星、LG、HTC、小米、华硕、ADW、APEX、NOVA、华为、ZUK、OPPO

ShortcutBadger

添加:

int badgeCount = 1;
ShortcutBadger.applyCount(context, badgeCount);  

删除:

ShortcutBadger.applyCount(context, 0);

【讨论】:

  • 这里,当后台应用和推送通知来时如何获取badgeCount?
  • 嗨,感谢图书馆。但是,我收到发布构建的构建错误。错误是Duplicate zip entry。我尝试了他们在 SO 上给出的所有可能的解决方案,但仍然无法通过。请问你能不能投光。
  • 我已经集成了这个库,但它不适用于三星 s5 和三星 s7,如果应用程序处于死状态(关闭并从任务管理器中删除)... :(
  • 这可能是一个愚蠢的问题,但是如何使用 npm 安装它?
【解决方案2】:

我已经弄清楚索尼设备是如何做到这一点的。

我已经在博客上写了 here。我还发布了一个关于此here 的单独 SO 问题。


Sony 设备使用名为 BadgeReciever 的类。

  1. 在清单文件中声明com.sonyericsson.home.permission.BROADCAST_BADGE 权限:

  2. Intent 广播到BadgeReceiver

    Intent intent = new Intent();
    
    intent.setAction("com.sonyericsson.home.action.UPDATE_BADGE");
    intent.putExtra("com.sonyericsson.home.intent.extra.badge.ACTIVITY_NAME", "com.yourdomain.yourapp.MainActivity");
    intent.putExtra("com.sonyericsson.home.intent.extra.badge.SHOW_MESSAGE", true);
    intent.putExtra("com.sonyericsson.home.intent.extra.badge.MESSAGE", "99");
    intent.putExtra("com.sonyericsson.home.intent.extra.badge.PACKAGE_NAME", "com.yourdomain.yourapp");
    
    sendBroadcast(intent);
    
  3. 完成。广播此Intent 后,启动器应在您的应用程序图标上显示一个徽章。

  4. 要再次移除徽章,只需发送一个新广播,这次将 SHOW_MESSAGE 设置为 false:

    intent.putExtra("com.sonyericsson.home.intent.extra.badge.SHOW_MESSAGE", false);
    

我已排除有关如何找到此问题的详细信息以保持答案简短,但所有内容都可以在博客中找到。对某人来说可能是一本有趣的书。

【讨论】:

    【解决方案3】:

    没有标准的方法来实现这一点;许多制造商(例如索尼或三星)已经在他们自己的 Android 定制中实现了它。

    例如在三星中,您必须使用 BADGE_COUNT_UPDATE 操作广播意图,让MainActivity 成为您的主要活动类,count 成为您要在应用图标中显示的数字,注意 0 将隐藏徽章:

    Intent intent = new Intent("android.intent.action.BADGE_COUNT_UPDATE");
    intent.putExtra("badge_count", count); 
    intent.putExtra("badge_count_package_name", context.getPackageName());
    intent.putExtra("badge_count_class_name", MainActivity.class.getName());
    context.sendBroadcast(intent);
    

    Sony 设备使用 "com.sonyericsson.home.action.UPDATE_BADGE" 操作及其自定义附加功能作为 @Marcus Answered,因此您必须在应用清单中添加 "com.sonyericsson.home.permission.BROADCAST_BADGE" 权限,并且:

    Intent intent = new Intent("com.sonyericsson.home.action.UPDATE_BADGE");
    intent.putExtra("com.sonyericsson.home.intent.extra.badge.ACTIVITY_NAME", MainActivity.class.getName());
    intent.putExtra("com.sonyericsson.home.intent.extra.badge.SHOW_MESSAGE", true);
    intent.putExtra("com.sonyericsson.home.intent.extra.badge.MESSAGE", String.valueOf(count));
    intent.putExtra("com.sonyericsson.home.intent.extra.badge.PACKAGE_NAME", context.getPackageName());
    context.sendBroadcast(intent);
    

    注意:最好查询应用程序的数据(context.getPackageName()MainActivity.class.getName())而不是硬编码,以防万一您将来进行重构。

    【讨论】:

      【解决方案4】:

      但不知何故,最新的 Android 版 Facebook 测试版就是这样做的......

      不符合the forum thread that contains the screenshot that you linked to。引用 vakama94:

      嗯,这实际上是 TouchWiz,而不仅仅是应用程序。我有一个运行 JellyBean 4.1.2 的 Galaxy S II,它做同样的事情,但有一些其他应用程序

      三星是否有一个公共 API 允许应用发布用作徽章的数字,我不能说。这可能是他们私下与几家公司合作的事情。

      欢迎您提供在普通 Android 主屏幕(例如 Nexus 系列设备之一)上看到这些徽章的证据。

      【讨论】:

      • 很公平 - 所以它仅限于三星设备......我仍然希望即使在这个“有限”的情况下,也许有人能获得更多关于如何做到这一点的信息......
      • @radley:这里没有位置,因为三星工程师有更好的方法来获取这些信息,而且只有三星工程师在三星的 TouchWiz 主屏幕上工作。当然,正如我在回答中提到的,三星发布了一些允许标记启动器图标的 SDK 是可以想象的。
      • 我在 Sony Xperia Z 上使用股票 android ......我的 facebook 应用程序图标有这些徽章,所以所有“it's touch wiz”cmets 都是错误的。这是普通的应用程序图标,而不是小部件。这个问题应该是未结束的。
      • @StevenElliott:我最近在其他地方看到了关于这个主题的另一个问答,表明他们正在使用一系列<activity-alias> 元素,每个元素都有不同的图标,因此应用程序有,比如说,有 100 个图标烘焙(例如,一个未标记,99 个带有从 1 到 99 的标记),并且它们启用和禁用组件在它们之间切换。如果是这样,那将是非常不可靠的,因为并非所有主屏幕都会更新其图标,更不用说在其他地方引用(例如,快捷方式)。无论如何,Android SDK 中没有直接用于此功能的内容。
      • 可以确认<activity-alias> 路由在 HTC Desire 2.2 上运行良好,但在 Galaxy Nexus 4.2.2 或 Nexus 7 4.3 上不可靠。我发现无法在较新的设备上可靠地解决这个问题 - 我的结论是“不要尝试”。
      【解决方案5】:

      我回答这个假设一些颤振开发者可以搜索这个...... 在 Flutter 中,您可以通过使用 Flutter app badger图书馆。

      就这么简单

      FlutterAppBadger.updateBadgeCount(1); // show
      FlutterAppBadger.removeBadge(); // hide
      

      【讨论】: