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.
- ¿Eclipse no está contento con una sola carpeta?
- Android GUI - ¿Cómo forzar un botón a la siguiente línea?
- Vista web de Android ui
- Establecer el enfoque a un botón
- Android - Botón Atrás en la barra de título
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
- Creación de asistente de configuración en Android
- ¿Hay alguna manera de mostrar una excepción personalizada en una alerta en Android?
- MvvmCross Checkbox se enlaza al comando android xml
- Ejemplo muy simple sobre un botón en Android?
- Android Listview Flotante Primera fila
- ¿Hay una manera de evitar tener FullView SearchView / Keyboard en el paisaje?
- Cómo insertar texto extraíble
- Android BroadcastReceiver onReceive Actualizar TextView en MainActivity
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
.
-
Declare el permiso
com.sonyericsson.home.permission.BROADCAST_BADGE
en su archivo de manifiesto: -
Difundir una
Intent
a laBadgeReceiver
: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);
-
Hecho. Una vez que se transmita esta
Intent
el lanzador debe mostrar una insignia en el icono de la aplicación. -
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.
- SherlockFragmentActivity que causa ClassNotFoundException
- Condición de carrera al mostrar y ocultar FAB con AnimationUtils