traducir quitar numero notificaciones mensajes los iconos globos globo contador como badgeprovider android badge samsung-touchwiz

android - quitar - ¿Cómo interactuar con BadgeProvider en teléfonos Samsung para agregar un conteo al ícono de la aplicación?



notificaciones globos en los iconos (7)

Para usuarios de Android 8.0 Oreo-

Para aquellos que están teniendo problemas para mostrar el número de distintivos de los dispositivos Samsung S8, S9 o Pixel que tienen Oreo en ellos, tenga en cuenta que la Biblioteca de https://github.com/leolin310148/ShortcutBadger/ no admite API>26 para Samsung Reportada aquí en los issues . Aquí debes verificarlo primero si isBadgeCounterSupported así -

public boolean isBadgeCounterSupported() { // Workaround for bug in ShortcutBadger in version 1.1.19, registered as // https://github.com/leolin310148/ShortcutBadger/issues/266 if (Build.MANUFACTURER.equalsIgnoreCase("Samsung") && Build.VERSION.SDK_INT >= 26) { Log.d("LOG_TAG", "Launcher icon badge (ShortcutBadger) is not supported on Samsung devices running Android 8 (or newer)."); return false; } return ShortcutBadger.isBadgeCounterSupported(context); }

La única forma es aplicar insignias desde la notificación . En cuanto a la aplicación de insignias de sus notificaciones, consulte la documentación de Android y tenga en cuenta la sección "Establecer recuento de notificaciones personalizadas".

Notification notification = new NotificationCompat.Builder(MainActivity.this, "my_channel_01") .setContentTitle("New Messages") .setContentText("You''ve received 3 new messages.") .setSmallIcon(R.drawable.ic_notify_status) .setNumber(messageCount) //this badge count .build();

Para obtener más información sobre las notificaciones en Android 8.0, consulte esta respuesta .

TWLauncher de Samsung permite que las aplicaciones creen recuentos de distintivos en los iconos de la aplicación.

¡Esto está completamente indocumentado! No se menciona en ninguna parte , y solo unas pocas aplicaciones lo están usando (p. Ej. Facebook, eBay).

¿Cómo usas esta funcionalidad para agregar un conteo al ícono de tu aplicación?

Esto es muy específico para dispositivos Samsung. No estoy preguntando sobre Android en general. Solo estoy preguntando por la insignia de la interfaz Touchwhiz de Samsung, que actualmente permite credenciales. Android no.


En Android, no tenemos un estilo de insignia como el iOS, pero algunos fabricantes apoyan la visualización de la 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 admiten agregar una insignia al ícono 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);



Hay otra herramienta que puede usar 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/


Primero, deberá agregar los siguientes permisos a su 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 número de identificación al ícono de tu 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 número de identificación 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 biblioteca para ayudar con esto. Tiene licencia de Apache, así que siéntase libre de usarlo como lo desee.

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


Uso esta clase para dispositivos Samsung y Sony (también disponible https://gist.github.com/Tadas44/cdae2f5995f21bf1c27f ). No olvides agregar <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; } }


agregue estos permisos al 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