Agregar insignia de notificación en el icono de la aplicación en android

Usted puede pensar que esto es una pregunta duplicada pero quiero que las respuestas sean más específicas que cualquier pregunta que sea similar a esto.

Primero dice que como facebook que tiene insignia de la notificación con el dispositivo de samsung. ¿Cómo agrega Facebook números de insignia en el icono de la aplicación en Android? . Y resulta ser el lanzador touchwiz que puede ser el lanzador por defecto de los dispositivos Samsung. Cuando intenté probar mi dispositivo del samsung con el lanzador de la nueva. Necesita instalar algún software de terceros o Nova TestlaUnread.

Heres el hecho. Pensé que el touchWiz está agregando la insignia para toda la aplicación, pero cuando intento probar con mi app para tener una cierta notificación, no demuestra ninguna insignia. Como he descubierto que el Samsung TouchWiz sólo muestra la aplicación a la aplicación seleccionada como se indica aquí: Ayuda de la interfaz de usuario para la notificación en el icono

The question is: is there any way to let know the touchWiz to add badge to my app-icon? Eso es para el dispositivo Samsung,

Con los argumentos anteriores, parece que el lanzador de diferentes proveedores son los responsables de las insignias en el icono de la aplicación en android. Sony Experia utiliza Experia Home / Launcher como su lanzador por defecto. En mi dispositivo sony, tenían alguna insignia en sms o miss llamadas o facebook.

The question is: like the previous question, is there any way to let know experia home to add badge to my app icon?

Porque yo estaba pensando que tal vez interactuar con el lanzador parece la solución de este "agregar insignia al icono de la aplicación".

Y hay esta solución sobre esta actividad alias y cambiar el icono de la aplicación de vez en cuando que creo que es basura. ¿Hay alguna manera de agregar una insignia a un icono de aplicación en Android?

Así que estoy buscando la solución en la interacción con los lanzadores que es vendedor específico.

'Cualquier solución será apreciada incluso yo iría profundamente con el uso de desarrollo nativo en android'

Gracias por adelantado

Utilizo esta clase para dispositivos Samsung y Sony (también disponible en https://gist.github.com/Tadas44/cdae2f5995f21bf1c27f ). No te olvides de añadir <uses-permission android:name="com.sonyericsson.home.permission.BROADCAST_BADGE" /> a AndroidManifest.xml

 public class BadgeUtils { public static void setBadge(Context context, int count) { setBadgeSamsung(context, count); setBadgeSony(context, count); } public static void clearBadge(Context context) { setBadgeSamsung(context, 0); clearBadgeSony(context); } private static void setBadgeSamsung(Context context, int count) { String launcherClassName = getLauncherClassName(context); if (launcherClassName == null) { return; } 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", launcherClassName); context.sendBroadcast(intent); } private static void setBadgeSony(Context context, int count) { String launcherClassName = getLauncherClassName(context); if (launcherClassName == null) { return; } Intent intent = new Intent(); intent.setAction("com.sonyericsson.home.action.UPDATE_BADGE"); intent.putExtra("com.sonyericsson.home.intent.extra.badge.ACTIVITY_NAME", launcherClassName); 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); } private static void clearBadgeSony(Context context) { String launcherClassName = getLauncherClassName(context); if (launcherClassName == null) { return; } Intent intent = new Intent(); intent.setAction("com.sonyericsson.home.action.UPDATE_BADGE"); intent.putExtra("com.sonyericsson.home.intent.extra.badge.ACTIVITY_NAME", launcherClassName); intent.putExtra("com.sonyericsson.home.intent.extra.badge.SHOW_MESSAGE", false); intent.putExtra("com.sonyericsson.home.intent.extra.badge.MESSAGE", String.valueOf(0)); intent.putExtra("com.sonyericsson.home.intent.extra.badge.PACKAGE_NAME", context.getPackageName()); context.sendBroadcast(intent); } private static String getLauncherClassName(Context context) { PackageManager pm = context.getPackageManager(); Intent intent = new Intent(Intent.ACTION_MAIN); intent.addCategory(Intent.CATEGORY_LAUNCHER); List<ResolveInfo> resolveInfos = pm.queryIntentActivities(intent, 0); for (ResolveInfo resolveInfo : resolveInfos) { String pkgName = resolveInfo.activityInfo.applicationInfo.packageName; if (pkgName.equalsIgnoreCase(context.getPackageName())) { String className = resolveInfo.activityInfo.name; return className; } } return null; } } 

Además de la solución de Daniel Ochoa para Samsung (ver comentario sobre OP), he descubierto cómo se hace esto para los dispositivos de Sony.

He publicado un blog sobre esto aquí . También he publicado un seperate SO pregunta sobre esto aquí .


Los dispositivos de Sony utilizan una clase llamada BadgeReciever .

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

  2. Difundir una Intent a la 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 transmita esta Intent el lanzador debe mostrar una insignia en el icono de la aplicación.

  4. Para quitar la insignia de nuevo, simplemente envíe una nueva emisión, esta vez con SHOW_MESSAGE establecido en false:

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

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

  • Diseño de interfaz de usuario de Android: elementos interactivos de ListView
  • Las ventanas flotantes de Android, junto con FLAG_SHOW_WHEN_LOCKED, fallan
  • Fuentes centrales de imágenes de NinePatch?
  • Indent bullet list en TextView
  • Cómo mantener la vista actual en ViewFlipper al cambiar la orientación
  • barra de búsqueda que cambia el tamaño del texto
  • Deshabilitar el cambio automático de diseño en Android
  • Escala de RecyclerVer elemento dependiendo de su posición
  • Ficha como fileexploler
  • Desarrollo de Android en Python Realistic
  • Android: No hay icono para la notificación
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.