55 votes

Existe-t-il un moyen d'ajouter un badge à l'icône d'une application sous Android ?

Sur l'iPhone, vous pouvez ajouter un badge numéroté à l'icône de l'application. Sur BlackBerry, j'ai réussi à peindre une image sur l'icône de l'application tout en étant dans le programme. Je veux faire la même chose pour Android. Je ne veux pas utiliser la barre de notification, car ce n'est pas quelque chose qui doit être notifié instantanément. Je veux simplement que l'utilisateur puisse voir combien de nouveaux messages se trouvent dans l'application en regardant simplement l'icône de l'application.

1 votes

Avez-vous trouvé une solution à ce problème ?

0 votes

C'est la meilleure solution que j'aie jamais trouvée. stackoverflow.com/a/24804467/957954

0 votes

Mon Samsung note 5 les affiche pour Skype, Whatsapp et Facebook. Cela doit donc être possible.

33voto

HXCaine Points 2331

Malheureusement, Android ne permet pas de modifier l'icône de l'application car elle est scellée dans l'APK une fois le programme compilé. Il n'y a pas de moyen de la changer par programme en une icône "dessinable".

Vous pouvez atteindre votre objectif en utilisant un widget au lieu d'une icône. Les widgets sont hautement personnalisables et peuvent faire ce que vous voulez.

Il y a une courte discussion sur la différence entre la notification par icône de l'iPhone et l'utilisation de widgets ici :

http://www.cnet.com/8301-19736_1-10278814-251.html

Comme vous le remarquerez, il n'y a pratiquement aucune différence entre l'utilisation d'un widget ou d'une icône, puisqu'ils peuvent avoir la même taille et le même aspect.

2 votes

Êtes-vous certain qu'il n'existe pas un moyen de détourner l'écran d'accueil du Launcher et d'ajouter un badge à l'image ? Je veux la même fonctionnalité et un appwidget est une solution différente à un problème différent. N'importe qui peut jeter mon widget, mais à moins de désinstaller l'App, l'icône reste vraie pour toujours. Des changements au niveau du système d'exploitation dans Gingerbread depuis que cette question a été posée à l'époque d'Eclair/Froyo ???

1 votes

Et les applications de base comme la messagerie ? Qu'en est-il des BadgeProvider ?

3 votes

Veuillez noter la date de cette réponse ! Android était très différent en 2010

16voto

Vivek Bansal Points 1051

Oui c'est possible....mais c'est possible sur les appareils Samsung(ce que j'ai essayé) J'en ai eu marre que personne ne propose cette information, alors la voici. Vous êtes les bienvenus.

Veuillez marquer cette réponse comme étant la réponse acceptée.

Vous devez d'abord ajouter les autorisations suivantes à votre fichier AndroidManifest.xml.

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

Afin d'interroger TOUS les résultats du BadgeProvider, procédez comme suit :

// 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();
}

Pour ajouter un compteur de badges à l'icône de votre application

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 vous voulez effacer le nombre de badges sur votre icône

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

Vous pouvez l'obtenir ici : https://github.com/shafty023/SamsungBadger

16voto

Marcus Points 694

Cela peut également être fait pour le Xperia Home de Sony. J'en ai parlé sur mon blog aquí mais les parties importantes sont ci-dessous. Les appareils Sony utilisent une classe nommée BadgeReciever .

  1. Déclarer le com.sonyericsson.home.permission.BROADCAST_BADGE dans votre fichier manifeste :

  2. Diffuser un Intent à 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. C'est fait. Une fois que cette Intent est diffusé, le lanceur devrait afficher un badge sur l'icône de votre application.

  4. Pour retirer le badge à nouveau, il suffit d'envoyer une nouvelle diffusion, cette fois avec SHOW_MESSAGE mis à faux :

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

J'ai exclu les détails sur la façon dont j'ai trouvé cela pour que la réponse soit courte, mais tout est disponible dans le blog. Cela pourrait être une lecture intéressante pour quelqu'un.

J'ai également posté une question distincte à ce sujet dans le cadre de l'OS. aquí et j'y ajouterai la réponse complète dès que j'y serai autorisé (j'ai besoin d'une réputation de 10 pour répondre à ma propre question dans les 8 heures).

1voto

Regardez cette bibliothèque qui ajoute des badges aux icônes, onglets et boutons.

https://github.com/jgilfelt/Android-viewbadger

0voto

grebulon Points 2302

Voici comment le faire pour :

Je pense qu'il y a aussi un moyen de le faire sur le lanceur LG, mais je n'ai pas encore trouvé comment.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X