57

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

但不知何故,最新的 Android 版 Facebook 测试版似乎做了一些至少看起来像徽章的事情,即使它在技术上并不完全如此。

在那篇文章中,一位评论者说它与 TouchWiz 有某种关系。而且在这里他们提到它是“S3 TouchWiz Jelly Bean Addon”的一个功能。

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

4

5 回答 5

31

嗨,你可以简单地使用这个库。

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

ShortcutBadger

在此处输入图像描述

添加 :

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

消除 :

ShortcutBadger.applyCount(context, 0);
于 2016-12-03T12:36:07.120 回答
23

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

我在这里写过博客。我还在这里发布了一个单独的 SO 问题。


Sony 设备使用一个名为BadgeReciever.

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

  2. 广播一个IntentBadgeReceiver

    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);
    

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

于 2013-11-26T14:29:16.050 回答
12

没有标准的方法来实现这一点;索尼或三星等许多制造商已经在他们自己的 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);

索尼设备使用"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()),而不是对其进行硬编码,以防万一您将来进行一些重构。

于 2016-03-01T18:35:28.713 回答
10

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

不是根据包含您链接到的屏幕截图的论坛主题。引用 vakama94:

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

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

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

于 2013-07-07T11:44:20.290 回答
0

我假设某些 Flutter 开发人员可以搜索这个问题来回答这个问题……在 Flutter 中,您可以通过使用 Flutter app badger library 来实现这一点。

这很简单

FlutterAppBadger.updateBadgeCount(1); // show
FlutterAppBadger.removeBadge(); // hide
于 2021-05-27T10:55:04.810 回答