Es un pequeño contador ubicado normalmente en la parte superior derecha en los iconos de las aplicaciones. Generalmente se usa para cuantificar las tareas que el usuario tiene pendientes por hacer. Esta funcionalidad es habitual en iOS pero no en Android. En Android sólo ciertas marcas de móviles como son Samsung, Sony y Xiaomi entre otras son las que lo proporcionan. Esta “capa” la proporciona una aplicación de sistemas que viene preinstalada en estas plataformas y que aportan una capa visual a los iconos o launchers de las aplicaciones. Por lo que se puede decir que esta funcionalidad no es nativa y no funcionará en todos los dispositivos. Puesto que es una aplicación de sistema la que coloca o no el Badge en las aplicaciones, la única forma que tenemos de colocar un badge en nuestra aplicación es añadiéndolo directamente a la aplicación y será ésta la que modificará el contador.
La aplicación que gestiona todos los badges se llama BadgeProvider (puede cambiar en función del móvil y la versión de TouchWiz). Todo el código de esta entrada será útil para móviles Samsung y no se garantiza que funcione en otros dispositivos y su funcionamiento depende de los cambios que tenga BadgeProvider en sus posteriores versiones.
A continuación se detallan los pasos a seguir:
Es necesario añadir permisos de escritura y/o lectura de la aplicación a la que queremos acceder. En este caso serían:
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 tabla en Base de datos en la siguiente:
_id --> Integer
package --> text
class --> text
badgecount --> integer
icon --> blob
Para consultar el Badge de las aplicaciones, es necesario el uso de un cursor para sacar la información de la Base de Datos.
//- Esta es la Uri para poder acceder al content del BadgePrider
Uri uri = Uri.parse("content://com.sec.badge/apps");
Cursor c = getContentResolver().query(uri, null, null, null, null);
//- Si es null indica que o no estamos en un móvil que soporte este tipo de badge o simplemente que el content ha cambiado
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 class = c.getString(2);
int badgeCount = c.getInt(3);
Log.d("Badge", "package: " + pkg + ", class: " + class + ", count: " + badgeCount);
}
} finally {
c.close();
}
Tenemos que especificar tanto el package de nuestra app, la main activity y el contador.
ContentValues cv = new ContentValues();
cv.put("package", getPackageName());
//- Nombre de la activity declarada en el manifest como android.intent.action.MAIN junto con la package de nuestra aplicación.
cv.put("class", "com.franlopez.pruebabadge.activities.TestActivity");
//- Entero con el número que queremos mostrar
cv.put("badgecount", 1);
//- Lanzamos el intent
getContentResolver().insert(Uri.parse("content://com.sec.badge/apps"), cv);
Si queremos modificar el badge de nuestra aplicación sólo tenemos que actualizar el registro (si existe) en la BD de la aplicación.
ContentValues cv = new ContentValues();
cv.put("badgecount", 0);
getContentResolver().update(Uri.parse("content://com.sec.badge/apps"), cv, "package=?", new String[] {getPackageName()});
En este primer vídeo del curso de Android desde 0 se explica cómo maquetar una…
Como siempre, si quieres ver directamente el vídeo donde se realiza toda la configuración pasos…
En esta ocasión hacemos una review del cargador inalámbrico Samsung Wireless Charger Duo Pad de…
Primero y antes de nada, si quieres ver un vídeo detallado de esta prueba, tienes…
El 23 de marzo se presentaron los nuevos dispositivos de OnePlus. Han sido una grata…
Primero y antes de nada, si quieres ver un vídeo detallado de los Samsung Galaxy…