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

je sais qu'il y a plusieurs questions ici qui demandent si c'est possible d'ajouter des badges à une application android et ils finissent tous avec une réponse sans réponse...

mais d'une certaine manière la dernière version bêta Facebook pour Android semble faire quelque chose qui ressemble au moins à un badge même si ce n'est pas techniquement exactement cela.

dans ce post un des commentateurs dit qu'il est en quelque sorte lié à TouchWiz. Et aussi ici ils le mentionne comme une caractéristique du "S3 TouchWiz Jelly Bean Addon".

j'apprécierais toujours des informations sur la façon dont cela peut être fait et s'il y a une API pour cela que je peux utiliser dans ma propre application (lors de l'exécution dans un environnement approprié - c.-à-d. le même périphérique où FB démontre ce comportement) ?

52
demandé sur Ahmad Aghazadeh 2013-07-07 12:22:37

4 réponses

Salut Vous pouvez utiliser cette lib tout simplement.

Support: Sony, Samsung,LG,HTC,Xiaomi,ASUS,ADW,APEX,NOVA,Huawei,ZUK, OPPO

ShortcutBadger

enter image description here

ajouter:

int badgeCount = 1;
ShortcutBadger.applyCount(context, badgeCount);  

Supprimer:

ShortcutBadger.applyCount(context, 0);
26
répondu Ahmad Aghazadeh 2016-12-04 09:05:28

j'ai trouvé comment faire pour les appareils de Sony.

j'ai blogué à ce sujet ici . J'ai aussi posté une question séparée sur ce ici .


Sony utilisation de dispositifs d'une classe nommée BadgeReciever .

  1. déclarez la permission com.sonyericsson.home.permission.BROADCAST_BADGE dans votre fichier manifeste:

  2. a diffusé un Intent au 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. fait. Une fois que ce Intent est diffusé, le lanceur doit afficher un badge sur l'icône de votre application.

  4. pour retirer à nouveau l'insigne, il suffit d'envoyer une nouvelle émission, cette fois avec SHOW_MESSAGE mis à false:

    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é ceci à garder la réponse courte, mais tout est disponible sur le blog. Peut-être une lecture intéressante pour quelqu'un.

23
répondu Marcus 2017-05-23 11:54:40

il n'y a pas un moyen standard pour atteindre cet objectif; de nombreux fabricants tels que Sony ou Samsung l'ont mis en œuvre dans leur propre customisation Android.

par exemple dans Samsung, vous devez diffuser une intention avec L'action BADGE_COUNT_UPDATE, laissez MainActivity être votre classe d'activité principale et count être le numéro que vous voulez afficher dans votre icône d'application, notez que 0 masquera le badge:

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", MainActivity.class.getName());
context.sendBroadcast(intent);

périphériques Sony utilise des "com.sonyericsson.home.action.UPDATE_BADGE" action avec leurs extras personnalisés comme @Marcus a répondu, donc vous devez ajouter "com.sonyericsson.home.permission.BROADCAST_BADGE" permission à votre manifeste app et:

Intent intent = new Intent("com.sonyericsson.home.action.UPDATE_BADGE");
intent.putExtra("com.sonyericsson.home.intent.extra.badge.ACTIVITY_NAME", MainActivity.class.getName());
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);

Note: il est souhaitable d'interroger les données de votre application ( context.getPackageName() , MainActivity.class.getName() ) plutôt que le hardcode il juste au cas où vous faites un certain remaniement dans le futur.

12
répondu Jorge Arimany 2016-03-01 19:14:50

mais d'une manière ou d'une autre la dernière version bêta Facebook pour android fait exactement cela...

ne correspond pas à le fil du forum qui contient la capture d'écran que vous avez liée à . Citant vakama94:

Eh bien, C'est en fait TouchWiz et pas seulement l'application. J'ai un Galaxy S II running JellyBean 4.1.2 et il fait la même chose mais avec d'autres applications

si Samsung a une API publique pour permettre aux applications de publier des numéros à utiliser comme badges, Je ne peux pas dire. Cela pourrait être quelque chose qu'ils n'en privé avec quelques entreprises.

vous êtes invités à fournir la preuve de voir ces badges sur un écran D'accueil Android stock, comme l'un des appareils de la série Nexus.

10
répondu CommonsWare 2013-07-07 11:44:20