¿Cómo agrega Facebook los números de la insignia en el ícono de la aplicación en Android?

Sé que hay varias preguntas aquí que preguntan si es posible agregar insignias a una aplicación de Android y todas terminan con una respuesta NO …

Pero de alguna manera, la última versión beta de Facebook para Android parece hacer algo que al menos parece una insignia, incluso si técnicamente no es exactamente eso.

En esa publicación, uno de los comentaristas dice que de alguna manera está relacionado con TouchWiz. Y también aquí lo mencionan como una característica del “Complemento S3 TouchWiz Jelly Bean”.

Todavía agradecería información sobre cómo se puede hacer esto y si hay alguna API para esto que pueda usar en mi propia aplicación (cuando se ejecuta en un entorno apropiado, es decir, el mismo dispositivo donde FB demuestra este comportamiento).

Hola, puedes usar esta lib simplemente.

Soporte: Sony, Samsung, LG, HTC, Xiaomi, ASUS, ADW, APEX, NOVA, Huawei, ZUK, OPPO

ShortcutBadger

enter image description here

Agregar:

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

Retirar :

 ShortcutBadger.applyCount(context, 0); 

He descubierto cómo se hace esto para los dispositivos de Sony.

He escrito sobre esto aquí . También publiqué una pregunta sobre SO por separado aquí .


Los dispositivos Sony usan una clase llamada BadgeReciever .

  1. Declare el permiso com.sonyericsson.home.permission.BROADCAST_BADGE en su archivo de manifiesto:

  2. Transmita una Intent al 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. Hecho. Una vez que se Intent este Intent el iniciador debe mostrar una insignia en el icono de su aplicación.

  4. Para eliminar la insignia nuevamente, simplemente envíe una nueva transmisión, esta vez con SHOW_MESSAGE establecido en falso:

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

He excluido detalles sobre cómo encontré esto para mantener la respuesta corta, pero está todo disponible en el blog. Puede ser una lectura interesante para alguien.

No hay una forma estándar de lograr esto; Muchos fabricantes como Sony o Samsung lo han implementado en su propia personalización de Android.

Por ejemplo, en Samsung, debe transmitir un bash con la acción BADGE_COUNT_UPDATE, deje que MainActivity sea ​​su clase de actividad principal y count el número que desea mostrar en el icono de su aplicación, tenga en cuenta que 0 ocultará la insignia:

 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); 

Los dispositivos de Sony utilizan la acción "com.sonyericsson.home.action.UPDATE_BADGE" con sus extras personalizados como @Marcus Responsed, por lo que debe agregar el permiso "com.sonyericsson.home.permission.BROADCAST_BADGE" al manifiesto de su aplicación y:

 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); 

Nota: es deseable consultar los datos de su aplicación ( context.getPackageName() , MainActivity.class.getName() ) en lugar de hardcode en caso de que realice alguna refactorización en el futuro.

Pero de alguna manera, la última versión beta de Facebook para Android hace eso …

No según el hilo del foro que contiene la captura de pantalla a la que se ha vinculado . Citando a vakama94:

Bueno, eso es realmente TouchWiz y no solo la aplicación. Tengo un Galaxy S II ejecutando JellyBean 4.1.2 y hace lo mismo, pero con algunas otras aplicaciones

No puedo decir si Samsung tiene una API pública para permitir que las aplicaciones publiquen números para usar como distintivos. Esto podría ser algo que hicieron en privado con algunas empresas.

Le invitamos a proporcionar evidencia de ver estas insignias en una pantalla de inicio de Android, como uno de los dispositivos de la serie Nexus.