182 votes

Comment afficher le nombre de notifications dans l'icône du lanceur d'applications ?

Samsung galaxy note 2 Android version 4.1.2

Je sais que cette question a déjà été posée et que la réponse n'a pas été possible.

Comment afficher un compteur de ballons sur l'icône du lanceur d'applications sur Android

Néanmoins, hier, j'ai mis à jour l'application Facebook et elle a commencé à afficher un compteur de messages privés non lus. Comment se fait-il que l'application Facebook puisse le faire et que je ne puisse pas le faire pour mon application ?

facebook icon

enter image description here

samsung galaxy note 2 Android version 4.1.2

114voto

Alexander Karaberov Points 3513

Android ne permet pas de modifier l'icône de l'application car elle est scellée dans l'APK de manière hermétique une fois le programme compilé. Il n'y a aucun moyen de le changer en un "drawable" programmatiquement. Mais il existe quelques moyens. Vous pouvez atteindre votre objectif en utilisant un widget au lieu d'une icône. Les widgets sont personnalisables. Veuillez lire ceci : http://www.cnet.com/8301-19736_1-10278814-251.html et ceci http://developer.Android.com/guide/topics/appwidgets/index.html . Regardez aussi ici : https://github.com/jgilfelt/Android-viewbadger . Il peut vous aider.

Mais je tiens à dire que c'est une MAUVAISE pratique. L'icône de l'application Notification badge est un modèle iOS et il ne devrait pas être utilisé dans les applications Android de toute façon. Dans Andrioïd, il y a une barre d'état de notification pour ce genre de choses : http://developer.Android.com/guide/topics/ui/notifiers/notifications.html Et si Facebook ou quelqu'un d'autre l'utilise, ce n'est pas un modèle commun ou une tendance que nous devrions considérer, mais si vous insistez quand même et ne voulez pas utiliser les widgets de l'écran d'accueil, alors regardez ici, s'il vous plaît :

Comment Facebook ajoute-t-il des numéros de badge sur l'icône des applications sous Android ?

Comme vous le voyez, il ne s'agit pas d'une application Facebook, mais de TouchWiz. Dans Android vanille, cela peut être réalisé avec Nova Launcher. http://forums.androidcentral.com/Android-applications/199709-how-guide-global-badge-notifications.html J'espère que cela vous permettra de clarifier certaines choses.

91voto

ChangUZ Points 1548

Il fonctionne dans le lanceur Touchwiz de Samsung.

public static void setBadge(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);
}

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

77voto

AlexGuti Points 121

ShortcutBadger est une bibliothèque qui ajoute une couche d'abstraction sur la marque de l'appareil et le lanceur actuel et offre un excellent résultat. Fonctionne avec LG, Sony, Samsung, HTC et d'autres lanceurs personnalisés.

Il a même un moyen d'afficher le nombre de badges sur le bureau des appareils Pure Android.

La mise à jour du nombre de badges dans l'icône de l'application est aussi simple qu'un appel :

int badgeCount = 1;
ShortcutBadger.setBadge(getApplicationContext(), badgeCount);

Il comprend une application de démonstration qui vous permet de tester son comportement.

12voto

Marcus Points 694

J'ai compris comment cela se passe pour les appareils Sony.

J'en ai parlé sur mon blog aquí . J'ai également posté une question distincte à ce sujet à l'attention de l'OS. aquí .


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.

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