it-swarm.dev

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

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

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

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

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

52
epeleg

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

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

ShortcutBadger

enter image description here

Добавлять :

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

Удалить :

ShortcutBadger.applyCount(context, 0);
28
Ahmad Aghazadeh

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

Я в блоге об этом здесь . Я также опубликовал отдельный SO вопрос об этом здесь .


Устройства Sony используют класс с именем BadgeReciever.

  1. Объявите разрешение com.sonyericsson.home.permission.BROADCAST_BADGE в файле манифеста:

  2. Передайте IntentBadgeReceiver:

    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, установленным в false:

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

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

23
Marcus

Нет стандартного способа достичь этого; Многие производители, такие как 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()), а не жестко их кодировать на случай, если в будущем вы будете проводить рефакторинг.

12
Jorge Arimany

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

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

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

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

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

10
CommonsWare