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

Mit dem Xperia Home von Sony können bestimmte Apps auf dem App-Symbol eine Sprechblase oder ein Badge anzeigen lassen. Facebook und Facebook Messenger tun dies ebenso wie die integrierte E-Mail-App.

Dies wurde für Samsungs Launcher getriggers , aber ich habe keine Dokumentation darüber gefunden, wie man es für Sonys Launcher macht.

Wie kann es gemacht werden?

Nachdem ich die Lösung von Daniel Ochoa für Samsungs Launcher gesehen habe, die die Badges mit einem BadgeProvider handhabt, wollte ich das auch für Sonys Xperia Home tun. Diese Antwort stammt direkt aus meinem Blog .

Wie ich es herausgefunden habe – Für alle Interessierten

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

com.sonyericsson.home.permission.BROADCAST_BADGE

Als nächstes habe ich mir alle verfügbaren Content-Provider angeschaut, aber ich habe dort nichts gefunden, was mit App-Icon-Emblemen zu tun hatte. Ich habe den Befehl in dieser Antwort ausgeführt , um eine Systemabbilddatei 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

Also, es wird mit einem BroadcastReceiver auf Sony im Gegensatz zu Samsung Content Provider behandelt. Also habe ich selbst einen Dummy BroadcastReceiver erstellt, auf die Aktion com.sonyericsson.home.action.UPDATE_BADGE gelauscht und festgestellt, dass die Extras an Sonys BadgeService weitergegeben wurden. Dazu brauchte ich auch eine Erlaubnis, aber das war leicht in der Dump-Datei 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. So 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 – eine Zeichenkette (keine Ganzzahl – die mir eine Weile gedauert hat …) mit der anzuzeigenden Nummer.
  • com.sonyericsson.home.intent.extra.badge.PACKAGE_NAME – Der Name Ihres Anwendungspakets.

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

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

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

  2. Sende eine Intent an den 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. Erledigt. Sobald diese Intent übertragen wurde, sollte der Launcher ein Abzeichen auf Ihrem Anwendungssymbol zeigen.

  4. Um das Abzeichen wieder zu entfernen, senden Sie einfach eine neue Sendung, diesmal mit SHOW_MESSAGE auf false:

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

Gut zu wissen

Die Nachricht ist eine Zeichenfolge!

Da MESSAGE eine MESSAGE ist, 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 machen, weil es einfach komisch aussieht.

Du hast Zugriff auf alle Apps!

Mit der BROADCAST_BADGE Berechtigung haben Sie nicht nur Zugriff auf das Symbol Ihrer eigenen App, sondern auf ALLE. So können Sie beispielsweise das Facebook-Logo 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, dass dies jemandem geholfen hat! 🙂

Ich verwende diese class für Samsung, Sony und HTC Geräte (auch verfügbar https://gist.github.com/Tadas44/cdae2f5995f21bf1c27f ). Vergessen Sie nicht, zu AndroidManifest.xml hinzuzufügen

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

Nun, das ist ziemlich schwierig. Der einzige Weg, den ich bisher gefunden habe, ist ein widget zu erstellen, das sowohl das App-Icon als auch das Badge behandelt.

Ich schlage vor, dass Sie diese Seite besuchen, wo Sie lernen, wie Sie das erreichen: Android: Ist es möglich, ein ImageView / ImageButton mit einer Nummer zu aktualisieren, um die Anzahl der neuen Nachrichten anzuzeigen?

Ich stelle fest, dass diese Frage ziemlich alt ist, aber aus historischen Gründen wurde die API für Anwendungen von Drittanbietern, die mit der Xperia Home API für diese spezielle function interagieren, im letzten Jahr veröffentlicht:

Xperia Home Badge-API ist jetzt öffentlich verfügbar

Mit Beispielcode hier:

sonyxperiadev / home-Abzeichen

Es gibt auch eine 3rd-Party-Bibliothek, die die meisten großen Telefonanbieter unterstützt, einschließlich der Xperia Home API:

leolin310148 / ShortcutBadger