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

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

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

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

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

5 ответов

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

Поддержка: Sony, Samsung, LG, HTC, Xiaomi, ASUS, ADW, APEX, NOVA, Huawei, ZUK, OPPO

ShortcutBadger

введите описание изображения здесь

Добавлять:

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

Удалить:

ShortcutBadger.applyCount(context, 0);

Я разобрался, как это сделать для устройств Sony.

Я писал об этом здесь. Я также разместил отдельный ТАК вопрос об этом здесь.


Устройства 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 установить в ложь:

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

Я исключил детали того, как я нашел это, чтобы краткий ответ, но все это доступно в блоге. Может быть, интересное чтение для кого-то.

Нет стандартного способа достичь этого; Многие производители, такие как 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);

Устройства Sony использует "com.sonyericsson.home.action.UPDATE_BADGE" действия с их пользовательскими дополнениями, как @Marcus Anspted, так что вы должны добавить "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()) вместо того, чтобы жестко закодировать его на всякий случай, если вы сделаете рефакторинг в будущем.

Но почему-то последняя бета-версия Facebook для Android делает именно это...

Не в соответствии с веткой форума, содержащей скриншот, на который вы ссылаетесь. Цитирую vakama94:

Ну, это на самом деле TouchWiz, а не только приложение. У меня Galaxy S II под управлением JellyBean 4.1.2, и он делает то же самое, но с некоторыми другими приложениями

Я не могу сказать, есть ли у Samsung общедоступный API, позволяющий приложениям публиковать номера для использования в качестве значков. Это может быть то, что они сделали в частном порядке с несколькими фирмами.

Вы можете представить доказательства того, что эти значки были на стандартном домашнем экране Android, например, на одном из устройств серии Nexus.

Я отвечаю на это, предполагая, что какой-нибудь разработчик flutter может это искать ... Во Flutter вы можете добиться этого, используя библиотеку барсука приложения Flutter .

Это так просто, как

      FlutterAppBadger.updateBadgeCount(1); // show
FlutterAppBadger.removeBadge(); // hide
Другие вопросы по тегам