Как 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.