[JAVA] Setzen Sie ein Abzeichen auf das Symbol

Setzen Sie ein Abzeichen auf das Symbol

Ich möchte ein Abzeichen auf das in HOME angezeigte Symbol wie das iPhone setzen.

Ich habe mich bei der Arbeit damit beschäftigt, also werde ich es als Memo schreiben.

Es gibt eine Methode, aber bitte beachten Sie, dass sie nicht für alle HOME-Apps gilt und nur in einigen HOME-Apps angezeigt werden kann.

Anwendbare HOME App

Nach der Überprüfung funktionierte es mit der folgenden HOME-App.

--Galaxy TouchWiz

Andere HOME-Apps wurden noch nicht überprüft, daher werde ich sie später überprüfen. Bei der Arbeit habe ich es auch auf Xperia Home angezeigt, aber in diesem Fall ist die Implementierung etwas anders Ich werde es später hinzufügen. ..

Anzeigemethode

Nun zur Implementierung. Es ist ein Ärger, also füge ich einfach die grob erstellten Methoden ein.

Weitere Informationen finden Sie unter hier. (Eher ist es fast das gleiche.)

    /**
     *Löschen Sie das Abzeichen auf dem Symbol.<br>
     ** Setze 0
     * 
     * @param Kontext Kontext
     */
    public static void clearIconBadge(final Context context) {
        setIconBadge(context, 0);
    }

    /**
     *Setzen Sie ein Abzeichen auf das Symbol.
     *
     * @param Kontext Kontext
     * @param count badge Nummer, die angezeigt werden soll
     */
    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);
    }

    /**
     *Ruft den Klassennamen der laufenden App ab.
     *
     * @param context Kontext.
     * @Rückgabe Klassenname der laufenden App<br>
     *Null, wenn es nicht normal erhalten werden kann.
     */
    @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;
    }

Rufen Sie setIconBadge () auf, wenn das Badge angezeigt werden soll. Wenn Sie das Abzeichen löschen möchten, können Sie auch 0 setzen. Wenn es sich also um den in ↑ geschriebenen Code handelt Es ist in Ordnung, wenn Sie clearIconBadge () aufrufen.

Schreiben Sie in Kotlin

Ich werde es auch für die Kotlin-Sprache veröffentlichen. Fügen Sie das erstellte Dienstprogramm so ein, wie es ist.

class Utility {
    companion object {

        /**
         *Löschen Sie das Symbolabzeichen.<br>
         ** Setze 0
         * 
         * @param Kontext Kontext
         */
        fun clearIconBadge(context: Context) {
            setIconBadge(context, 0)
        }

        /**
         *Setzen Sie ein Abzeichen auf das Symbol.

         * @param Kontext Kontext
         *
         * @param count badge Nummer, die angezeigt werden soll
         */
        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)
        }

        /**
         *Ruft den Klassennamen der laufenden App ab.
         * 
         * @param context Kontext.
         * @Rückgabe Klassenname der laufenden App<br></br>
         * *Null, wenn es nicht normal erhalten werden kann.
         */
        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

Setzen Sie ein Abzeichen auf das Symbol
Ein Hinweis zur libGDX Utils-Klasse
Geben Sie ein Suffix für die Methode an
Geben Sie ein Suffix für Methode 2 heraus
[Swift 5] Wählen Sie mit der UIDate-Auswahl unter iOS14 ein Datum aus
Ein Hinweis zum Seed-Feature von Ruby on Rails
Ich habe die Quarkus-App auf GKE (Google Kubernetes Engine) gestellt.
Versuchen Sie, mit Helidon einen WebAP-Server auf dem Mikro zu starten
Verwenden Sie unter Ubuntu das leistungsstarke SQL-Entwicklungstool "A5: SQL Mk-2"
Ich möchte das JDK auf meinem Mac-PC installieren
Warum einen Zeilenumbruch am Ende der Datei einfügen?
Setzen Sie Ubuntu 20.04.1 in Raspberry 4 ein
Hinweise zum Umfang
Scala läuft auf einer JVM
Fügen Sie Oracle Java 8 in CircleCI 2 ein
Poste Videos auf Schienen
Logik zum Zeichnen eines Kreises auf der Konsole mit ASCII-Grafik
(Ruby on Rails6) Erstellen Sie eine Funktion zum Bearbeiten des veröffentlichten Inhalts