Jak dodać plakietkę/licznik powiadomień do ikony aplikacji na urządzeniach Sony Xperia?
W Xperia Home Sony niektóre aplikacje mają możliwość wyświetlania bańki licznika lub znaczka na ikonie aplikacji. Facebook i Facebook Messenger robią to, a także wbudowana aplikacja e-mail.
To zostało rozwiązane dla Launchera Samsunga, ale nie natknąłem się na żadnej dokumentacji, jak to zrobić dla Launchera Sony.
Jak to zrobić?
4 answers
Po obejrzeniu rozwiązania Daniela Ochoa dla Launchera Samsunga, który używa Badgeprovidera do obsługi odznak, postanowiłem zrobić to samo dla Sony Xperia Home. Ta odpowiedź pochodzi bezpośrednio z mojego bloga .
Jak to rozgryzłem - dla wszystkich zainteresowanych
Natknąłem się na Sony AppXplore i użył go, aby sprawdzić uprawnienia aplikacji Facebook. Aplikacja Facebook wymaga następującego zezwolenia, które jest kluczem do wyświetlania odznak na urządzeniach Sony:
Com.sonyericsson.do domu.pozwolenie.BROADCAST_BADGE
Następnie przejrzałem wszystkich dostępnych dostawców treści , ale nie znalazłem tam nic związanego z plakietkami ikon aplikacji. Uruchomiłem polecenie w tej odpowiedzi , aby uzyskać plik zrzutu systemu i wyszukałem "badge" za pomocą Notepad++. Znalazłem to:
Com.sonyericsson.do domu.akcja.UPDATE_BADGE: 41be9a90sonyericsson.Strona główna/.BadgeService $ badgereceiver filter 41be9858
Więc, jest obsługiwany za pomocą Broadcastreciver na Sony, w przeciwieństwie do dostawcy treści Samsunga. Stworzyłem więc własną audycję, słuchając "action com".sonyericsson.do domu.akcja.UPDATE_BADGE i okazało się, że dodatki zostały przekazane do BadgeService Sony. W tym celu potrzebowałem również pozwolenia, ale łatwo było je znaleźć w pliku zrzutu:
Com.sonyericsson.do domu.pozwolenie.RECEIVE_BADGE
Dodatki wysłane przez Facebook, the Aplikacja e-mail, itp., to:
- com.sonyericsson.do domu.intencja.extra.odznaka.ACTIVITY_NAME - The nazwa głównej aktywności Twojej aplikacji, android.intencja.akcja.MAIN. To jest więc wyrzutnia wie, na której ikonie pokazać odznakę.
- com.sonyericsson.do domu.intencja.extra.odznaka.SHOW_MESSAGE - a boolean wskazujący, czy chcemy pokazać odznakę, czy nie (co robimy!)
- com.sonyericsson.do domu.intencja.extra.odznaka.MESSAGE - ciąg znaków (nie jest liczbą całkowitą - trochę mi to zajęło...) z numerem pokazać.
- com.sonyericsson.do domu.intencja.extra.odznaka.PACKAGE_NAME - Nazwa pakietu aplikacji.
Jak wyświetlać odznaki na ikonie launchera aplikacji na urządzeniach Sony Xperia]}
Okazuje się więc, że bardzo łatwo jest pokazać odznakę na ikonie aplikacji w launcherze. IMO jest o wiele bardziej prosto niż w przypadku launchera Samsunga. Oto poradnik krok po kroku (i nie jest long!)
Zadeklaruj pozwolenie
com.sonyericsson.home.permission.BROADCAST_BADGE
w swoim pliku manifestu:-
Nadaj
Intent
doBadgeReceiver
: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);
Załatwione. Po emisji
Intent
launcher powinien pokazać odznakę na ikonie aplikacji.-
Aby ponownie usunąć odznakę, po prostu wyślij nową transmisję, tym razem z
SHOW_MESSAGE
ustawioną na false:intent.putExtra("com.sonyericsson.home.intent.extra.badge.SHOW_MESSAGE", false);
Dobrze wiedzieć
Wiadomość jest ciągiem znaków!
Od MESSAGE
jest String
, można rzeczywiście dodać słowa do odznaki:
intent.putExtra("com.sonyericsson.home.intent.extra.badge.MESSAGE", "Testing");
Ale nie zrobiłbym tego, bo to wygląda dziwnie.
Masz dostęp do wszystkich aplikacji!
Pozwolenie BROADCAST_BADGE
daje nie tylko dostęp do ikony własnej aplikacji, ale do wszystkich z nich. Na przykład, oto jak możesz ustawić plakietkę Facebook ' a:
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);
Mam nadzieję, że to komuś pomogło! :)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 10:31:09
Używam tej klasy dla urządzeń Samsung, Sony i HTC (dostępne również https://gist.github.com/Tadas44/cdae2f5995f21bf1c27f nie zapomnij dodać <uses-permission android:name="com.sonyericsson.home.permission.BROADCAST_BADGE" />
do 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;
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-20 08:52:05
Cóż, to jest dość trudne do zrobienia. Jedynym sposobem, jaki znalazłem do tej pory, jest stworzenie widget
, która będzie obsługiwać zarówno ikonę aplikacji, jak i plakietkę.
Gorąco polecam odwiedzić tę stronę, gdzie dowiesz się, jak to osiągnąć: Android: czy można zaktualizować ImageView / ImageButton z numerem, aby pokazać liczbę nowych wiadomości?
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:17:53
Zdaję sobie sprawę, że to pytanie jest dość stare, ale dla celów historycznych, API dla aplikacji innych firm do interakcji z API Xperia Home dla tej konkretnej funkcji zostało upublicznione w zeszłym roku:
Xperia Home badge API teraz publicznie dostępne
Z przykładowym kodem tutaj:
Istnieje również biblioteka innych firm, która obsługuje większość głównych dostawców telefonów, w tym Xperia Home API:
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-20 10:49:47