¿Cómo interactuar con el BadgeProvider en los teléfonos Samsung para agregar un recuento al icono de la aplicación?

TWLauncher de Samsung permite a las aplicaciones crear cuentas de claves en los iconos de las aplicaciones.

Esto es completamente indocumentado! No hay mención de él en cualquier lugar , y sólo un puñado de aplicaciones lo utilizan (por ejemplo, Facebook, eBay).

¿Cómo utilizas esta funcionalidad para agregar un recuento al icono de tu aplicación?

6 Solutions collect form web for “¿Cómo interactuar con el BadgeProvider en los teléfonos Samsung para agregar un recuento al icono de la aplicación?”

En primer lugar, deberá agregar los siguientes permisos al archivo AndroidManifest.xml.

<uses-permission android:name="com.sec.android.provider.badge.permission.READ" /> <uses-permission android:name="com.sec.android.provider.badge.permission.WRITE" /> 

La estructura de la columna es la siguiente:

 (integer) _id, (text) package, (text) class, (integer) badgecount, (blob) icon, (???) extraData 

Para consultar TODOS los resultados de BadgeProvider haga lo siguiente:

 // This is the content uri for the BadgeProvider Uri uri = Uri.parse("content://com.sec.badge/apps"); Cursor c = getContentResolver().query(uri, null, null, null, null); // This indicates the provider doesn't exist and you probably aren't running // on a Samsung phone running TWLauncher. This has to be outside of try/finally block if (c == null) { return; } try { if (!c.moveToFirst()) { // No results. Nothing to query return; } c.moveToPosition(-1); while (c.moveToNext()) { String pkg = c.getString(1); String clazz = c.getString(2); int badgeCount = c.getInt(3); Log.d("BadgeTest", "package: " + pkg + ", class: " + clazz + ", count: " + String.valueOf(cnt)); } } finally { c.close(); } 

Para agregar un recuento de insignia al icono de la aplicación

 ContentValues cv = new ContentValues(); cv.put("package", getPackageName()); // Name of your activity declared in the manifest as android.intent.action.MAIN. // Must be fully qualified name as shown below cv.put("class", "com.example.badge.activity.Test"); cv.put("badgecount", 1); // integer count you want to display // Execute insert getContentResolver().insert(Uri.parse("content://com.sec.badge/apps"), cv); 

Si desea borrar el recuento de la insignia en su icono

 ContentValues cv = new ContentValues(); cv.put("badgecount", 0); getContentResolver().update(Uri.parse("content://com.sec.badge/apps"), cv, "package=?", new String[] {getPackageName()}); 

NUEVO
He creado un proyecto de código abierto que puede importar como una biblioteca para ayudar con esto. Tiene licencia como Apache, así que siéntete libre de usarla como quieras.

Puede obtenerlo desde aquí: https://github.com/shafty023/SamsungBadger

Hay otra genial biblioteca de código abierto que admite diferentes dispositivos: https://github.com/leolin310148/ShortcutBadger/

Agregar estos permisos a manifiesto

 <!--for android badge--> <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS"/> <uses-permission android:name="com.android.launcher.permission.WRITE_SETTINGS"/> <!--for Samsung badge--> <uses-permission android:name="com.sec.android.provider.badge.permission.READ"/> <uses-permission android:name="com.sec.android.provider.badge.permission.WRITE"/> <!--for htc badge--> <uses-permission android:name="com.htc.launcher.permission.READ_SETTINGS"/> <uses-permission android:name="com.htc.launcher.permission.UPDATE_SHORTCUT"/> <!--for sony badge--> <uses-permission android:name="com.sonyericsson.home.permission.BROADCAST_BADGE"/> <!--for apex badge--> <uses-permission android:name="com.anddoes.launcher.permission.UPDATE_COUNT"/> 

Agregue estos nombres de paquete a su clase:

  final String HOME_PACKAGE_SONY = "com.sonyericsson.home"; final String HOME_PACKAGE_SAMSUNG = "com.sec.android.app.launcher"; final String HOME_PACKAGE_LG = "com.lge.launcher2"; final String HOME_PACKAGE_HTC = "com.htc.launcher"; final String HOME_PACKAGE_ANDROID = "com.android.launcher"; final String HOME_PACKAGE_APEX = "com.anddoes.launcher"; final String HOME_PACKAGE_ADW = "org.adw.launcher"; final String HOME_PACKAGE_ADW_EX = "org.adwfreak.launcher"; final String HOME_PACKAGE_NOVA = "com.teslacoilsw.launcher"; 

para usar :

  // just put your pachage and main activity class path String classPath = "ir.faasaa.resa.MainActivity"; ContentValues cv = new ContentValues(); cv.put("package", context.getPackageName()); cv.put("class", classPath); cv.put("badgecount", count); context.getContentResolver().insert(Uri.parse(HOME_PACKAGE_SAMSUNG), cv); 

Gracias a ShortcutBadger

En android, no tenemos enfoque de estilo de claves como iOS, pero algunos fabricantes están apoyando para mostrar insignia en los iconos de la aplicación.

Soporte para Sony y HTC.

Ejemplo de icono de estilo de insignia en la aplicación en android

Sony y HTC admite añadir insignia al icono de la aplicación.

Para Sony

 <uses-permission android:name="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", Class Name); intent.putExtra("com.sonyericsson.home.intent.extra.badge.SHOW_MESSAGE", true); intent.putExtra("com.sonyericsson.home.intent.extra.badge.MESSAGE",number); intent.putExtra("com.sonyericsson.home.intent.extra.badge.PACKAGE_NAME", packageName); sendBroadcast(intent); 

Para HTC:

 <uses-permission android:name="com.htc.launcher.permission.READ_SETTINGS" /> <uses-permission android:name="com.htc.launcher.permission.UPDATE_SHORTCUT" /> Intent updateIntent = new Intent("com.htc.launcher.action.UPDATE_SHORTCUT"); updateIntent.putExtra("packagename", packageName); updateIntent.putExtra("count", number); this.sendBroadcast(updateIntent); Intent setNotificationIntent = new Intent("com.htc.launcher.action.SET_NOTIFICATION"); ComponentName localComponentName = new ComponentName(packageName, className); setNotificationIntent.putExtra("com.htc.launcher.extra.COMPONENT", localComponentName.flattenToShortString()); setNotificationIntent.putExtra("com.htc.launcher.extra.COUNT", number); this.sendBroadcast(setNotificationIntent); 

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

Hay otra herramienta que puede utilizar para dispositivos Xperia

 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.putExtra("com.sonyericsson.home.intent.extra.badge.MESSAGE", "10"); 

Más detalles como abajo

http://www.marcusforsberg.net/blog/android-notification-badge-app-icon-sony/

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.