[JAVA] Mettre un badge sur l'icône

Mettre un badge sur l'icône

Je souhaite mettre un badge sur l'icône affichée dans HOME comme iPhone.

Je l'ai traité au travail, je vais donc l'écrire sous forme de mémo.

Il existe une méthode, mais veuillez noter qu'elle n'est pas applicable à toutes les applications HOME et ne peut être affichée que dans certaines applications HOME.

Application HOME applicable

Après vérification, cela a fonctionné avec l'application HOME suivante.

Les autres applications HOME n'ont pas encore été vérifiées, je les vérifierai donc plus tard. Au travail, je l'ai également affiché sur Xperia Home, mais dans ce cas, la mise en œuvre est un peu différente, donc Je l'ajouterai plus tard. ..

Méthode d'affichage

Maintenant pour la mise en œuvre. C'est un problème, donc je vais simplement coller les méthodes grossièrement créées.

Veuillez vous reporter à ici. (Au contraire, c'est presque la même chose.)

    /**
     *Effacez le badge sur l'icône.<br>
     ** Définir 0
     * 
     * @contexte de contexte param
     */
    public static void clearIconBadge(final Context context) {
        setIconBadge(context, 0);
    }

    /**
     *Mettez un badge sur l'icône.
     *
     * @contexte de contexte param
     * @numéro de badge de comptage de paramètres à afficher
     */
    public static void setIconBadge(final Context context, final int count) {
        if (context == null) {
            return;
        }
        final String launcherClassName = getLauncherClassName(context);
        if (TextUtils.isEmpty(launcherClassName)) {
            return;
        }
        final 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);
    }

    /**
     *Obtenez le nom de classe de l'application en cours d'exécution.
     *
     * @param context Contexte.
     * @return Nom de classe de l'application en cours d'exécution<br>
     *Nul s'il ne peut pas être obtenu normalement.
     */
    @Nullable
    private static String getLauncherClassName(@NonNull final Context context) {
        final PackageManager pm = context.getPackageManager();
        final Intent intent = new Intent(Intent.ACTION_MAIN);
        intent.addCategory(Intent.CATEGORY_LAUNCHER);
        final List<ResolveInfo> resolveInfoList = pm.queryIntentActivities(intent, 0);

        for (final ResolveInfo resolveInfo : resolveInfoList) {
            if (resolveInfo == null) {
                continue;
            }
            final String pkgName = resolveInfo.activityInfo.applicationInfo.packageName;
            if (pkgName.equalsIgnoreCase(context.getPackageName())) {
                return resolveInfo.activityInfo.name;
            }
        }

        return null;
    }

Appelez setIconBadge () lorsque vous souhaitez que le badge apparaisse. Aussi, si vous souhaitez effacer le badge, vous pouvez mettre 0, donc s'il s'agit du code écrit en ↑ Ce n'est pas grave si vous appelez clearIconBadge ().

Ecrire en Kotlin

Je le posterai également pour la langue Kotlin. Collez l'utilitaire créé tel quel.

class Utility {
    companion object {

        /**
         *Effacez le badge d'icône.<br>
         ** Définir 0
         * 
         * @contexte de contexte param
         */
        fun clearIconBadge(context: Context) {
            setIconBadge(context, 0)
        }

        /**
         *Mettez un badge sur l'icône.

         * @contexte de contexte param
         *
         * @numéro de badge de comptage de paramètres à afficher
         */
        fun setIconBadge(context: Context?, count: Int) {
            if (context == null) {
                return
            }
            val launcherClassName = getLauncherClassName(context)
            if (TextUtils.isEmpty(launcherClassName)) {
                return
            }
            val intent = Intent("android.intent.action.BADGE_COUNT_UPDATE")
            intent.putExtra("badge_count", count)
            intent.putExtra("badge_count_package_name", context.packageName)
            intent.putExtra("badge_count_class_name", launcherClassName)

            context.sendBroadcast(intent)
        }

        /**
         *Obtenez le nom de classe de l'application en cours d'exécution.
         * 
         * @param context Contexte.
         * @return Nom de classe de l'application en cours d'exécution<br></br>
         * *Nul s'il ne peut pas être obtenu normalement.
         */
        private fun getLauncherClassName(context: Context): String? {
            val pm = context.packageManager
            val intent = Intent(Intent.ACTION_MAIN)
            intent.addCategory(Intent.CATEGORY_LAUNCHER)
            val resolveInfoList = pm.queryIntentActivities(intent, 0)

            for (resolveInfo in resolveInfoList) {
                if (resolveInfo == null) {
                    continue
                }
                val pkgName = resolveInfo.activityInfo.applicationInfo.packageName
                if (pkgName.equals(context.packageName, ignoreCase = true)) {
                    return resolveInfo.activityInfo.name
                }
            }

            return null
        }
    }
}

Recommended Posts

Mettre un badge sur l'icône
Une note sur la classe Utils libGDX
Sortez avec un suffixe sur la méthode
Sortez avec un suffixe sur la méthode 2
[Swift 5] Sélectionnez une date avec le sélecteur UIDate sur iOS14
Une note sur la fonction de départ de Ruby on Rails
J'ai mis l'application Quarkus sur GKE (Google Kubernetes Engine).
Essayez de lancer un serveur WebAP sur le micro à l'aide d'Helidon
Utilisez l'outil de développement SQL hautes performances "A5: SQL Mk-2" sur Ubuntu
Je veux mettre le JDK sur mon PC Mac
Pourquoi insérer un saut de ligne à la fin du fichier
Mettez Ubuntu 20.04.1 dans Raspberry 4
Remarques sur la portée
Scala s'exécute sur une JVM
Mettez Oracle Java 8 dans CircleCI 2
Publier des vidéos sur les rails
Logique pour dessiner un cercle sur la console avec l'art ASCII
(Ruby on Rails6) Créer une fonction pour modifier le contenu publié