Как 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
Добавлять:
int badgeCount = 1;
ShortcutBadger.applyCount(context, badgeCount);
Удалить:
ShortcutBadger.applyCount(context, 0);
Я разобрался, как это сделать для устройств Sony.
Я писал об этом здесь. Я также разместил отдельный ТАК вопрос об этом здесь.
Устройства Sony используют класс с именем BadgeReciever
,
Объявить
com.sonyericsson.home.permission.BROADCAST_BADGE
разрешение в вашем файле манифеста:Трансляция
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);
Готово. Однажды это
Intent
При запуске программы запуска должен отображаться значок на значке вашего приложения.Чтобы снова удалить значок, просто отправьте новую трансляцию, на этот раз с
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