Facebook如何在Android中的应用程序图标上添加徽章编号?

epe*_*leg 52 java android facebook badge android-launcher

我知道这里有几个Q,询问是否有可能在Android应用程序中添加徽章,并且他们最终都没有答案......

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

在该帖子中,其中一位评论者表示,它与TouchWiz有某种关联.而且他们在这里也提到它是"S3 TouchWiz Jelly Bean Addon"的一个特色.

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

Ahm*_*deh 30

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

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

ShortcutBadger

在此输入图像描述

添加:

int badgeCount = 1;
ShortcutBadger.applyCount(context, badgeCount);  
Run Code Online (Sandbox Code Playgroud)

去掉 :

ShortcutBadger.applyCount(context, 0);
Run Code Online (Sandbox Code Playgroud)

  • 在这里,当后台有应用程序和推送通知到来时,如何获取badgeCount? (2认同)

Mar*_*cus 23

我已经弄清楚如何为索尼设备做到这一点.

我在这里写了博客.我也张贴了关于这一个单独的SO问题在这里.


索尼设备使用一个名为的类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);
    
    Run Code Online (Sandbox Code Playgroud)
  3. 完成.一旦Intent在广播发射器应显示在您的应用程序图标徽章.

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

    intent.putExtra("com.sonyericsson.home.intent.extra.badge.SHOW_MESSAGE", false);
    
    Run Code Online (Sandbox Code Playgroud)

我已经排除了有关我如何找到这个以保持答案简短的细节,但这些都在博客中提供.对某人来说,这可能是一个有趣的读物.


Jor*_*any 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);
Run Code Online (Sandbox Code Playgroud)

索尼设备将"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);
Run Code Online (Sandbox Code Playgroud)

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


Com*_*are 10

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

不是根据包含您链接到的屏幕截图的论坛帖子.引用vakama94:

嗯,这实际上是TouchWiz,而不仅仅是应用程序.我有一个运行JellyBean 4.1.2的Galaxy S II,它与其他一些应用程序相同

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

欢迎您提供在Android主屏幕上查看这些徽章的证据,例如Nexus系列设备之一.

  • @StevenElliott:我最近在这个主题的其他地方看到了另一个问题和答案,建议他们正在做的是使用一系列`<activity-alias>`元素,每个元素都有不同的图标,所以应用程序有100个图标烘烤(例如,一个未填充,99个带有从1到99的徽章),它们启用和禁用组件在它们之间切换.如果是这样,那将是非常不可靠的,因为并非所有主屏幕都必须更新其图标,更不用说其他地方的参考(例如,快捷方式).无论如何,Android SDK中没有直接用于此功能. (3认同)
  • 我在索尼Xperia Z上使用现货android ...我的脸书app图标有这些徽章,所以所有"它的触摸巫师"评论是错误的.这是普通的应用程序图标,而不是小部件.这个问题应该是不公开的. (2认同)