Wie füge ich auf Sony Xperia-Geräten ein Benachrichtigungsabzeichen / eine Zählung zum Anwendungssymbol hinzu?

Lesezeit: 8 Minuten

Wie fuge ich auf Sony Xperia Geraten ein Benachrichtigungsabzeichen eine
Markus

Bei Sonys Xperia Home haben bestimmte Apps die Möglichkeit, eine Zählblase oder ein Abzeichen auf dem App-Symbol anzuzeigen. Facebook und Facebook Messenger tun dies ebenso wie die eingebaute E-Mail-App.

Dies wurde für den Launcher von Samsung gelöst, aber ich habe keine Dokumentation darüber gefunden, wie dies für den Launcher von Sony zu tun ist.

Wie kann es gemacht werden?

  • Ich kann dies nicht als Antwort posten, da ich nicht genug Ruf habe, um meine eigene Frage innerhalb von 8 Stunden zu beantworten, aber hier ist eine Anleitung, wie es geht: marcusforsberg.net/blog/…. Ich werde dies als Antwort posten und es später heute akzeptieren, wenn ich darf.

    – Markus

    26. November 13 um 12:44 Uhr


  • Ich habe diese Antwort für viewBadge gefunden. github.com/jgilfelt/android-viewbadger Gehen Sie es einfach durch und finden Sie heraus, ob es in Ihrem Fall richtig funktioniert. lassen Sie mich wissen, wenn jemand Probleme damit hat.

    – Entwickler

    18. Februar 14 um 8:47 Uhr


  • Mögliches Duplikat von Gibt es eine Möglichkeit, einem Anwendungssymbol in Android ein Abzeichen hinzuzufügen?

    – Shirish Herwade

    14. November 17 um 11:10 Uhr

Wie fuge ich auf Sony Xperia Geraten ein Benachrichtigungsabzeichen eine
Markus

Nachdem ich die Lösung von Daniel Ochoa für Samsungs Launcher gesehen hatte, die einen BadgeProvider verwendet, um die Abzeichen zu handhaben, machte ich mich daran, dasselbe für Sonys Xperia Home zu tun. Diese Antwort wird direkt übernommen aus meinem Blog.

Wie ich es herausgefunden habe – Für alle Interessierten

Ich bin darüber gestolpert Sonys AppXplore und benutzte es, um die Erlaubnis der Facebook-App zu überprüfen. Die Facebook-App fordert die folgende Berechtigung an, die der Schlüssel zum Anzeigen von Badges auf Sony-Geräten ist:

com.sonyericsson.home.permission.BROADCAST_BADGE

Als nächstes habe ich alle verfügbaren Inhaltsanbieter durchgesehen, aber ich habe dort nichts gefunden, was mit App-Icon-Badges zu tun hat. Ich habe den Befehl in dieser Antwort ausgeführt, um eine System-Dump-Datei zu erhalten, und mit Notepad ++ nach „Badge“ gesucht. Ich habe das gefunden:

com.sonyericsson.home.action.UPDATE_BADGE: 41be9a90 com.sonyericsson.home/.BadgeService$BadgeReceiver filter 41be9858

Es wird also mit einem BroadcastReciever auf Sony gehandhabt, im Gegensatz zu Samsungs Content Provider. Also habe ich einen eigenen Dummy-BroadcastReciever erstellt, der auf die Aktion com.sonyericsson.home.action.UPDATE_BADGE lauscht, und festgestellt, dass die Extras an Sonys BadgeService übergeben wurden. Dafür brauchte ich auch eine Berechtigung, aber die war in der Dump-Datei leicht zu finden:

com.sonyericsson.home.permission.RECEIVE_BADGE

Die von Facebook, der E-Mail-App usw. gesendeten Extras sind:

  • com.sonyericsson.home.intent.extra.badge.ACTIVITY_NAME – Der Name der Hauptaktivität Ihrer App, android.intent.action.MAIN. Auf diese Weise weiß der Launcher, auf welchem ​​Symbol das Abzeichen angezeigt werden soll.
  • com.sonyericsson.home.intent.extra.badge.SHOW_MESSAGE – ein boolescher Wert, der angibt, ob wir das Abzeichen zeigen wollen oder nicht (was wir tun!)
  • com.sonyericsson.home.intent.extra.badge.MESSAGE – ein String (kein Integer – das hat eine Weile gedauert, bis ich es erkannt habe …) mit der Zahl, die angezeigt werden soll.
  • com.sonyericsson.home.intent.extra.badge.PACKAGE_NAME – Der Name Ihres Anwendungspakets.

So zeigen Sie Abzeichen auf dem Startsymbol Ihrer App auf Sony Xperia-Geräten an

Es stellt sich also heraus, dass es sehr einfach ist, ein Abzeichen auf Ihrem Anwendungssymbol im Launcher anzuzeigen. IMO ist es viel einfacher als für Samsungs Launcher. Hier ist eine Schritt-für-Schritt-Anleitung (und es ist nicht lang!)

  1. Deklarieren Sie die com.sonyericsson.home.permission.BROADCAST_BADGE Berechtigung in Ihrer Manifestdatei:

  2. Sendung ein Intent zum 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. Fertig. Einmal dies Intent gesendet wird, sollte der Launcher ein Abzeichen auf Ihrem Anwendungssymbol anzeigen.

  4. Um den Badge wieder zu entfernen, senden Sie einfach eine neue Sendung, diesmal mit SHOW_MESSAGE auf falsch setzen:

    intent.putExtra("com.sonyericsson.home.intent.extra.badge.SHOW_MESSAGE", false);
    

Gut zu wissen

Die Nachricht ist eine Zeichenfolge!

Seit MESSAGE ist ein String, können Sie dem Abzeichen tatsächlich Wörter hinzufügen:

intent.putExtra("com.sonyericsson.home.intent.extra.badge.MESSAGE", "Testing");

Aber ich würde das nicht tun, weil es einfach komisch aussieht.

Sie haben Zugriff auf alle Apps!

Der BROADCAST_BADGE Berechtigung gibt Ihnen nicht nur Zugriff auf das Symbol Ihrer eigenen App, sondern auf ALLE. So können Sie beispielsweise das Abzeichen von Facebook festlegen:

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);

Ich hoffe, das hat jemandem geholfen! 🙂

  • Danke, dass du das geteilt hast!

    – Damien R.

    27. November 13 um 15:05 Uhr

  • Da dies ein Rundfunkempfänger ist, schätze ich, gibt es keine Möglichkeit, Ihren aktuellen Ausweisdatensatz abzufragen? Unterscheidet Sony außerdem zwischen UPDATE_BADGE UND CREATE_BADGE? Senden Sie immer UPDATE_BADGE, auch wenn Sie noch nie einen Badge-Datensatz erstellt haben?

    – Daniel Ochoa

    28. November 13 um 16:14 Uhr

  • @Daniel Ochoa Soweit ich weiß, wird UPDATE_BADGE immer verwendet, kein CREATE_BADGE. Und ja, UPDATE_BADGE wird auch dann verwendet, wenn kein vorheriges Abzeichen vorhanden ist. Und nein, ich glaube nicht, dass Sie sehen können, was das Abzeichen gerade sagt – das müssten Sie manuell nachverfolgen. 🙂

    – Markus

    28. November 13 um 16:44 Uhr

  • Als Update dazu unterstützt der Drittanbieter-Launcher Apex auch Abzeichen auf ähnliche Weise wie der Launcher von Sony: forum.xda-developers.com/showthread.php?t=1930365

    – Markus

    10. April 14 um 7:49 Uhr

  • @Marcus Kann dieser Code nur für Sony Xperia-Geräte verwendet werden?

    – Shivam Kumar

    21. Juni 18 um 12:18 Uhr

1644073448 5 Wie fuge ich auf Sony Xperia Geraten ein Benachrichtigungsabzeichen eine
Tadas Valaitis

Ich verwende diese Klasse für Samsung-, Sony- und HTC-Geräte (ebenfalls verfügbar https://gist.github.com/Tadas44/cdae2f5995f21bf1c27f). Vergessen Sie nicht hinzuzufügen <uses-permission android:name="com.sonyericsson.home.permission.BROADCAST_BADGE" /> zu 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;
    }
}

  • Hallo, weiß jemand, was die minimale SDK-Anforderung für das Badge-Update in Samsung- und Sony-Geräten ist? Vielen Dank im Voraus.

    – Jan

    29. November 14 um 4:43 Uhr

  • Gute Arbeit! Hoffe, mehr Telefone wie Xiaomi, Acer, HTC und Motorola zu unterstützen

    – ZhangZhan

    14. März 17 um 3:56 Uhr

Wie fuge ich auf Sony Xperia Geraten ein Benachrichtigungsabzeichen eine
Manitoba

Nun, das ist ziemlich schwierig zu tun. Die einzige Möglichkeit, die ich bisher gefunden habe, besteht darin, eine zu erstellen widget die sowohl das App-Symbol als auch das Abzeichen verarbeitet.

Ich empfehle Ihnen dringend, diese Seite zu besuchen, auf der Sie erfahren, wie Sie das erreichen: Android: Ist es möglich, einen ImageView/ImageButton mit einer Zahl zu aktualisieren, um die Anzahl neuer Nachrichten anzuzeigen?

  • Heh, ich habe es tatsächlich herausgefunden und wollte eine Antwort auf meine eigene Frage posten, aber ich kann das nicht ohne 10 Ruf tun … Ups. : P Ich werde in Kürze einen Link zur Antwort als Kommentar posten und ihn in 8 Stunden als Antwort posten, wenn ich darf.

    – Markus

    26. November 13 um 12:23 Uhr

Mir ist klar, dass diese Frage ziemlich alt ist, aber aus historischen Gründen wurde die API für Anwendungen von Drittanbietern zur Interaktion mit der Xperia Home-API für diese spezielle Funktion letztes Jahr veröffentlicht:

Xperia Home Badge-API jetzt öffentlich verfügbar

Mit Beispielcode hier:

sonyxperiadev/home-badge

Es gibt auch eine Bibliothek von Drittanbietern, die die meisten großen Telefonanbieter unterstützt, einschließlich der Xperia Home API:

leolin310148/ShortcutBadger

.

784570cookie-checkWie füge ich auf Sony Xperia-Geräten ein Benachrichtigungsabzeichen / eine Zählung zum Anwendungssymbol hinzu?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy