Как Facebook добавляет номера значков на значок приложения в Android?
Я знаю, что здесь есть несколько вопросов, которые спрашивают, можно ли добавить значки в приложение для Android и все они получат ответ NO...
Но почему-то последняя бета-версия Facebook для Android похоже, делает что-то, что по крайней мере выглядит как значок, даже если это не технически точно.
В этом сообщении один из комментаторов говорит, что это как-то связано с TouchWiz.
И также здесь они упоминают об этом как о признаке "S3 TouchWiz Jelly Bean Addon".
Мне все же хотелось бы получить информацию о том, как это можно сделать, и если для этого есть какой-то API, который я могу использовать в своем собственном приложении (при работе в соответствующей среде, то есть в том же устройстве, где FB демонстрирует это поведение)?
Ответы
Ответ 1
Я выяснил, как это делается для устройств Sony.
Я писал об этом здесь. Я также разместил отдельный SO-вопрос об этом здесь.
Устройства 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
установите значение false:
intent.putExtra("com.sonyericsson.home.intent.extra.badge.SHOW_MESSAGE", false);
Я исключил детали о том, как я нашел это, чтобы сохранить ответ короче, но все это доступно в блоге. Может быть интересно прочитать кого-то.
Ответ 2
Привет, вы можете просто использовать эту библиотеку.
Поддержка: Sony, Samsung, LG, HTC, Xiaomi, ASUS, ADW, APEX, NOVA, Huawei, ZUK, OPPO
ShortcutBadger
![введите описание изображения здесь]()
Добавить:
int badgeCount = 1;
ShortcutBadger.applyCount(context, badgeCount);
Удалить:
ShortcutBadger.applyCount(context, 0);
Ответ 3
Существует не стандартный способ достижения этого; Многие производители, такие как 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 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);
Примечание. Желательно запросить данные вашего приложения (context.getPackageName()
, MainActivity.class.getName()
), а не жестко кодировать его на всякий случай, если вы сделаете некоторое рефакторинг в будущем.
Ответ 4
Но почему-то последняя бета-версия Facebook для Android делает именно это...
Не соответствует нить форума, содержащая скриншот, с которым вы связались. Цитирование vakama94:
Ну, это на самом деле TouchWiz, а не только приложение. У меня Galaxy S II работает JellyBean 4.1.2, и он делает то же самое, но с некоторыми другими приложениями
Если у Samsung есть общедоступный API, позволяющий приложениям публиковать номера, которые будут использоваться в качестве значков, я не могу сказать. Это может быть что-то, что они делали в частном порядке с несколькими фирмами.
Вы можете предоставить доказательства того, что эти значки видны на домашнем экране Android Android, например, одном из устройств серии Nexus.