Facebook在Android应用图标上如何添加徽章数字?

57

我知道这里有几个问题问能否将徽章添加到Android应用程序中,它们都以NO答案结束......

但不知何故,最新的Android Facebook测试版似乎做了些什么,即使从技术上讲并不完全是徽章,看起来至少像一个徽章

在那篇文章中,其中一位评论者说它与TouchWiz相关。同样在这里,他们将其提及为“S3 TouchWiz Jelly Bean添加功能”。

我仍然希望了解如何完成这项工作,以及是否有一些API可以在我的应用程序中使用(当在适当的环境中运行时 - 即在FB演示此行为的设备上)?


2
@Waza_Be 所有这些问题似乎都不相关。我不是在问如何做到这一点或者它是否可以实现。我想知道的是它是如何实现的。而且大多数其他问题都已经被回答为无法实现(也许需要更新)。总之,我想知道新的FB应用程序中看到的是什么以及它是如何工作的... - epeleg
4
@bill-the-lizard - 我不确定我理解为什么会被认为离题了,也不知道我为什么会被点踩... 许多人想要在安卓应用程序图标上显示数字徽章的目标。某些应用(如FB)展示这样的行为,让我相信或许有人可以解释他们是怎么做到的,并且或许能够帮助我实现类似效果在我的应用程序中。我会编辑问题的文字以澄清一些内容。 - epeleg
3
@bill-the-lizard关闭这个帖子并认为它不相关是错误的决定。尽管TouchWiz不是“纯粹”的Android,但它显然是Android的一个相关部分。虽然此功能仅限于某些开发人员,但它显然不是无关话题。 - radley
4
这在原生安卓上可用。我不知道如何,也不知道为什么......但是现在我正在查看我的 Facebook 应用程序图标上的徽章,在运行在 Xperia Z 上的原生安卓上,这个问题应该不会关闭。 - Steven Elliott
3
我已经在这里撰写了一篇如何操作的文章:https://dev59.com/dmIj5IYBdhLWcg3wilvB#20136484 - Daniel Ochoa
显示剩余6条评论
5个回答

31

嗨,您可以轻松地使用此库。

支持:Sony、Samsung、LG、HTC、Xiaomi、ASUS、ADW、APEX、NOVA、Huawei、ZUK、OPPO

ShortcutBadger

在此输入图像描述

添加:

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

移除:

ShortcutBadger.applyCount(context, 0);

2
在这里,当应用程序在后台运行并收到推送通知时,如何获取badgeCount? - Avinash
你好,感谢提供这个库。但是我在发布版本构建时遇到了一些错误。错误信息为Duplicate zip entry。我尝试了Stack Overflow上所有可能的解决方案,但仍然无法解决。请问您能否提供帮助或指导?谢谢。 - Atul
我已经集成了这个库,但它在三星S5和S7上无法工作,如果应用程序处于死亡状态(关闭并从任务管理器中删除)... :( - zephyr
这可能是一个愚蠢的问题,但你如何使用npm安装它? - Sarotobi

23

我已经弄清楚了如何在 Sony 设备上完成此操作。

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


Sony 设备使用名为BadgeReciever的类。

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

  2. BadgeReceiver广播一个Intent

  3. 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);
    
  4. 完成。一旦广播此Intent,启动器应在您的应用程序图标上显示徽章。

  5. 要再次删除徽章,只需发送新的广播,这次将SHOW_MESSAGE设置为false:

  6. intent.putExtra("com.sonyericsson.home.intent.extra.badge.SHOW_MESSAGE", false);
    
    我为了让答案更简洁,省略了如何找到这个答案的细节,但这些在博客中都可以看到。也许对某些人来说会是一篇有趣的阅读材料。

12

没有一种标准方法可以实现此功能。像 Sony 或 Samsung 这样的许多制造商已经在其自己的 Android 定制中实现了此功能。

例如,在 Samsung 中,您必须使用 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所回答的那样,因此您必须在您的应用程序清单中添加"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())而不是硬编码它。


10
但是最新的Facebook安卓测试版似乎就可以做到这一点...根据您提供的截图,在论坛帖子中并不是这样。引用vakama94所说: “好吧,那其实是TouchWiz而不仅仅是应用程序。我有一个运行JellyBean 4.1.2的Galaxy S II手机,它也使用其他一些应用程序做同样的事情。”能否说三星有一个公共API来允许应用程序发布数字以用作标记,我无法说。这可能是他们与少数公司私下完成的事情。 如果您能提供在原生Android主屏幕上看到这些标记的证据,比如Nexus系列设备之一,我们将不胜感激。

好的,所以它只限于三星设备...但我仍然希望在这个“有限”的情况下,也许有人对如何完成这项工作有更多的信息... - epeleg
他的问题并没有涉及到“原生”安卓系统,所以这有什么关系呢?你是在暗示TouchWiz开发在这里没有地位吗? - radley
1
@radley:这里并不适合它,因为三星工程师有更好的方法获取此信息,并且只有三星工程师可以工作在三星的TouchWiz主屏幕上。当然,三星可能发布了一些SDK以允许启动器图标的标记,正如我在我的答案中提到的那样。 - CommonsWare
2
我在Sony Xperia Z上使用原生Android系统...我的Facebook应用程序图标上有这些徽章,所以所有“这是TouchWiz”的评论都是错误的。这是正常的应用程序图标,而不是小部件。这个问题应该被重新打开。 - Steven Elliott
3
@StevenElliott最近在其他地方看到了一个关于这个话题的问题和答案,建议使用一系列带有不同图标的<activity-alias>元素来实现,因此该应用程序内置了100个图标(例如一个没有徽章的图标,99个带有从1到99的徽章),并且他们通过启用和禁用组件来在它们之间切换。如果是这样,那么这将非常不可靠,因为并不是所有的主屏幕都会更新它们的图标,更不用说其他地方的引用(例如快捷方式)了。无论如何,Android SDK中没有直接支持此功能的内容。 - CommonsWare
1
可以确认在HTC Desire 2.2上,<activity-alias>路由运行良好,但在Galaxy Nexus 4.2.2或Nexus 7 4.3上不可靠。我没有找到可靠地解决这个问题的方法 - 我的结论是“不要尝试”。 - Richard Le Mesurier

0
我回答这个问题是基于假设有一些Flutter开发者会搜索到这个问题... 在Flutter中,你可以通过使用Flutter app badger库来实现这个功能。
这非常简单。
FlutterAppBadger.updateBadgeCount(1); // show
FlutterAppBadger.removeBadge(); // hide

似乎不再起作用了。 - VDTe
Flutter_app_badger使用https://github.com/leolin310148/ShortcutBadger为Android。 - nazarpunk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接