web-dev-qa-db-fra.com

Comment ajouter un badge/compte de notification à l'icône de l'application sur les appareils Sony Xperia?

Avec le Sony Xperia Home, certaines applications peuvent afficher une bulle ou un badge de nombre sur l’icône de l’application. Facebook et Facebook Messenger le font, ainsi que l'application de messagerie intégrée. 

Cela a été résolu pour le lanceur de Samsung }, mais je n'ai trouvé aucun document expliquant comment le faire pour le lanceur de Sony. 

Comment ceci peut être fait?

33
Marcus

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" /> à AndroidManifest.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;
    }
}
28
Tadas Valaitis

Eh bien, c'est assez difficile à faire. Le seul moyen que j'ai trouvé jusqu'à présent est de créer une widget qui gérera à la fois l'icône de l'application et le badge.

Je vous suggère fortement de visiter cette page où vous apprendrez comment y parvenir: Android: Est-il possible de mettre à jour un ImageView/ImageButton avec un numéro indiquant le nombre de nouveaux messages?

0
Manitoba

Je me rends compte que cette question est assez ancienne, mais pour des raisons historiques, l’API permettant aux applications tierces de dialoguer avec l’API Xperia Home pour cette fonctionnalité particulière a été rendue publique l’année dernière:

L'API de badge Xperia Home est maintenant accessible au public

Avec un exemple de code ici:

sonyxperiadev/home-badge

Il existe également une bibliothèque tierce qui prend en charge la plupart des principaux fournisseurs de téléphones, y compris l'API Xperia Home:

leolin310148/ShortcutBadger

0
Martin Lindström