Comment ajouter un badge de notification / count à l'icône de l'application sur les appareils Xperia de Sony?
avec Xperia Home de Sony, certaines applications ont la possibilité d'afficher une bulle de comptage ou un badge sur l'icône de l'application. Facebook et facebook Messenger le font tous les deux, ainsi que l'application e-mail intégrée.
cela a été résolu pour le lanceur de Samsung , mais je n'ai pas trouvé de documentation sur la façon de le faire pour le lanceur de Sony.
Comment faire?
4 réponses
après avoir vu la solution de Daniel Ochoa pour le lanceur de Samsung, qui utilise un BadgeProvider pour manipuler les badges, j'ai entrepris de faire la même chose pour la maison Xperia de Sony. Cette réponse est prise directement de mon blog .
Comment je me suis dit elle - Pour toute personne intéressée
je suis tombé sur AppXplore de Sony et l'ai utilisé pour vérifier les autorisations de L'application Facebook. Le Facebook app demande la permission suivante, qui est la clé pour afficher des badges sur les appareils de Sony:
com.sonyericsson.maison.autorisation.BROADCAST_BADGE
ensuite, j'ai regardé tous les fournisseurs de contenu disponibles mais je n'ai rien trouvé en rapport avec les badges d'icône d'application. J'ai lancé la commande dans cette réponse pour obtenir un fichier de dump système et j'ai cherché" badge " en utilisant le bloc-notes++. J'ai trouvé ceci:
com.sonyericsson.maison.action.UPDATE_BADGE: 41be9a90 com.sonyericsson.maison./BadgeService$BadgeReceiver filter 41be9858
donc, il est géré en utilisant un diffuseur sur Sony par opposition au fournisseur de contenu de Samsung. Donc, j'ai créé un faux diffuseur de mon propre chef, en écoutant pour l'action com.sonyericsson.maison.action.UPDATE_BADGE, et a trouvé les extras passés au service de badges de Sony. Pour ce, J'avais aussi besoin d'une permission, mais c'était facile à trouver dans le fichier dump:
com.sonyericsson.maison.autorisation.RECEIVE_BADGE
les extras envoyés par Facebook, l'application e-mail, etc, sont:
- com.sonyericsson.maison.intention.supplémentaire.insigne.ACTIVITY_NAME - le nom de l'activité principale de votre application, android.intention.action.PRINCIPAL. C'est donc le lanceur sait quelle icône pour montrer le badge.
- com.sonyericsson.maison.intention.supplémentaire.insigne.SHOW_MESSAGE - a booléen indiquant si nous voulons montrer le badge ou pas (ce que nous faisons!)
- com.sonyericsson.maison.intention.supplémentaire.insigne.MESSAGE - une chaîne (pas un nombre entier - qui m'a pris un certain temps à réaliser...) avec le nombre montrer.
- com.sonyericsson.maison.intention.supplémentaire.insigne.PACKAGE_NAME - le nom de votre dossier de demande.
Comment afficher des badges sur l'icône de lanceur de votre application sur les appareils Xperia de Sony
donc, il s'avère qu'il est très simple de montrer un badge sur votre icône d'application dans le lanceur. C'est beaucoup plus simple que pour le lanceur de Samsung. Voici un guide étape par étape (et il n'est pas long!)
-
, Déclarent les
com.sonyericsson.home.permission.BROADCAST_BADGE
permission dans votre manifeste: - "1519120920 de la" Diffusion
Intent
à laBadgeReceiver
: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);
-
fait. Une fois que ce
Intent
est diffusé, le lanceur devrait afficher un badge sur l'icône de votre application. -
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);
bon à savoir
le message est une chaîne de caractères!
depuis MESSAGE
est un String
, vous pouvez en fait ajouter des mots à l'insigne:
intent.putExtra("com.sonyericsson.home.intent.extra.badge.MESSAGE", "Testing");
mais je ne ferais pas ça parce que ça a l'air bizarre.
Vous avez accès à toutes les applications!
la permission BROADCAST_BADGE
ne vous donne pas seulement accédez à l'icône de votre propre application, mais à toutes. Par exemple, voici comment vous pouvez définir le badge de Facebook:
Intent intent = new Intent();
intent.setAction("com.sonyericsson.home.action.UPDATE_BADGE");
intent.putExtra("com.sonyericsson.home.intent.extra.badge.ACTIVITY_NAME", "com.facebook.katana.LoginActivity");
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.facebook.katana");
sendBroadcast(intent);
j'espère que ce sera utile à quelqu'un! :)
j'utilise cette classe pour les appareils Samsung, Sony et HTC (également disponible https://gist.github.com/Tadas44/cdae2f5995f21bf1c27f ). N'oubliez pas d'ajouter <uses-permission android:name="com.sonyericsson.home.permission.BROADCAST_BADGE" />
à Androïdmanifest.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;
}
}
eh Bien, c'est assez difficile à faire. Le seul moyen que j'ai trouvé jusqu'à présent est de créer un widget
qui traitera à la fois l'icône de l'application et le badge.
je vous conseille vivement de visiter cette page où vous apprendrez comment y parvenir: Android: est-il possible de mettre à jour un ImageView/ImageButton avec un numéro pour afficher le nombre de nouveaux messages?
je me rends compte que cette question est assez ancienne, mais pour des raisons historiques, L'API pour les applications tierces pour interagir avec L'API Xperia Home pour cette fonctionnalité particulière a été rendue publique l'année dernière:
Xperia Maison insigne de l'API désormais accessible au public
avec code d'échantillon ici:
Il ya aussi un tiers bibliothèque qui prend en charge la plupart des principaux fournisseurs de téléphones, y compris L'API Xperia Home: