Android

How does Facebook add badge numbers on app icon in Android?

Как Facebook добавляет номера бейджей на значок приложения в Android?

Я знаю, что здесь есть несколько вопросов, в которых спрашивают, возможно ли добавить значки в приложение для Android, и все они заканчиваются ответом "НЕТ"...

Но каким-то образом последняя бета-версия Facebook для Android, кажется, делает что-то, что, по крайней мере, выглядит как значок, даже если технически это не совсем так.

В этом посте один из комментаторов говорит, что это каким-то образом связано с TouchWiz. И также здесь они упоминают это как функцию "Дополнения S3 TouchWiz Jelly Bean".

Я все же был бы признателен за информацию о том, как это можно сделать и есть ли для этого какой-нибудь API, который я могу использовать в своем собственном приложении (при запуске в соответствующей среде - т. Е. На том же устройстве, где FB демонстрирует такое поведение)?

Переведено автоматически
Ответ 1

Привет, вы можете просто использовать эту библиотеку.

Поддержка: 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

I have figured out how this is done for Sony devices.

I've blogged about it here. I've also posted a seperate SO question about this here.


Sony devices use a class named BadgeReciever.


  1. Declare the com.sonyericsson.home.permission.BROADCAST_BADGE permission in your manifest file:


  2. Broadcast an Intent to the 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. Done. Once this Intent is broadcast the launcher should show a badge on your application icon.


  4. To remove the badge again, simply send a new broadcast, this time with SHOW_MESSAGE set to false:


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

I've excluded details on how I found this to keep the answer short, but it's all available in the blog. Might be an interesting read for someone.

Ответ 3

There is not a standard way to achieve this; Many makers such as Sony or Samsung have implemented it in their own Android customization.

For example in Samsung, you have to broadcast an intent with BADGE_COUNT_UPDATE action, let MainActivity be your main activity class and count be the number you want to display in your app icon, note that 0 will hide the badge:

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 devices uses "com.sonyericsson.home.action.UPDATE_BADGE" action with their custom extras as @Marcus Answered, so you have to add "com.sonyericsson.home.permission.BROADCAST_BADGE" permission to your app manifest and:

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

Note: it's desirable to query your app's data (context.getPackageName(), MainActivity.class.getName()) rather than hardcode it just in case you do some refactoring in the future.

Ответ 4

But somehow the latest Facebook beta version for android does just that...


Not according to the forum thread that contains the screenshot that you linked to. Quoting vakama94:


Well, that's actually TouchWiz and not just the app. I have a Galaxy S II running JellyBean 4.1.2 and it makes the same thing but with some other applications


Whether Samsung has a public API to allow apps to publish numbers to be used as badges, I cannot say. This could be something that they did privately with a few firms.

You are welcome to provide evidence of seeing these badges on a stock Android home screen, such as one of the Nexus series devices.

java android