Как добавить значок уведомления / счет в значок приложения на устройствах Sony Xperia?
с Xperia Home от Sony, некоторые приложения имеют возможность отображать счетчик пузырь или значок на значке приложения. Facebook и Facebook Messenger делают это, а также встроенное приложение электронной почты.
Это решено для пусковой установки Samsung, но я не сталкивался с какой-либо документацией о том, как это сделать для запуска Sony.
Как это можно сделать?
4 ответов
увидев решение Даниэля Очоа для запуска Samsung, который использует BadgeProvider для обработки значков, Я решил сделать то же самое для Xperia Home от Sony. Этот ответ берется непосредственно из моего блога.
как я это понял - для всех, кто заинтересован
я наткнулся на AppXplore от Sony и использовал его, чтобы проверить разрешения приложения Facebook. Приложение Facebook запрашивает следующее разрешение: ключ для отображения значков на устройствах Sony:
com.компания SonyEricsson.жилище.разрешение.BROADCAST_BADGE
затем я просмотрел все доступные контент-провайдеры но я не нашел ничего, связанного с значками значков приложений. Я запустил в ответ чтобы получить файл дампа системы и искать "значок" с помощью Notepad++. Я нашел это:
com.компания SonyEricsson.жилище.действие.UPDATE_BADGE: 41be9a90 com.компания SonyEricsson.домашний./BadgeService$BadgeReceiver фильтр 41be9858
таким образом, он обрабатывается с помощью BroadcastReciever на Sony в отличие от поставщика контента Samsung. Итак, я создал собственный фиктивный вещатель, слушая action com.компания SonyEricsson.жилище.действие.UPDATE_BADGE, и нашли массовки перешел к BadgeService от Sony. Для этого мне также нужно разрешение, но это было легко найти в файле дампа:
com.компания SonyEricsson.жилище.разрешение.RECEIVE_BADGE
дополнительно посылали по Facebook, электронной почты, приложения и т. д., являются:
- com.компания SonyEricsson.жилище.намерение.дополнительный.значок.ACTIVITY_NAME - в название основной деятельности вашего приложения, android.намерение.действие.ГЛАВНЫЙ. Это таким образом, launcher знает, какой значок показывать значок.
- com.компания SonyEricsson.жилище.намерение.дополнительный.значок.SHOW_MESSAGE - a логическое указание, если мы хотим показывать значок или нет (что мы и делаем!)
- com.компания SonyEricsson.жилище.намерение.дополнительный.значок.Сообщение - строка (не целое число - это заняло некоторое время, чтобы понять...) с номером показывать.
- com.компания SonyEricsson.жилище.намерение.дополнительный.значок.Имя_пакета - имя пакета приложения.
как показать значки на значке запуска вашего приложения на устройствах Sony Xperia
Итак, оказывается, это очень просто показать значок на значке приложения в лаунчере. IMO это гораздо более прямолинейно, чем для пусковой установки Samsung. Вот пошаговое руководство (и это не долго!)
объявить
com.sonyericsson.home.permission.BROADCAST_BADGE
разрешение в файле манифеста:-
эфир
Intent
до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);
сделано. Однажды это
Intent
транслируется пусковая установка должна показать значок на вашем приложении икона.-
чтобы снова удалить значок, просто отправьте новую трансляцию, на этот раз с
SHOW_MESSAGE
значение false:intent.putExtra("com.sonyericsson.home.intent.extra.badge.SHOW_MESSAGE", false);
полезно знать
сообщение представляет собой строку!
С MESSAGE
это String
, вы можете добавить слова к значку:
intent.putExtra("com.sonyericsson.home.intent.extra.badge.MESSAGE", "Testing");
но я бы не стал этого делать, потому что это выглядит странно.
у вас есть доступ ко всем приложениям!
в BROADCAST_BADGE
разрешение не только дает вам доступ к значку вашего собственного приложения, но и ко всем из них. Например, вот как вы можете установить значок Facebook:
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);
надеюсь, это кому-то помогло! :)
Я использую этот класс для устройств Samsung, Sony и HTC (также доступноhttps://gist.github.com/Tadas44/cdae2f5995f21bf1c27f). Не забудьте добавить <uses-permission android:name="com.sonyericsson.home.permission.BROADCAST_BADGE" />
в 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;
}
}
Ну, это довольно трудно сделать. Единственный способ, который я нашел до сих пор, - создать widget
Это будет обрабатывать как значок приложения, так и значок.
Я настоятельно рекомендую вам посетить эту страницу, где вы узнаете, как добиться этого: Android: можно ли обновить ImageView/ImageButton с номером, чтобы показать количество новых сообщений?
Я понимаю, что этот вопрос довольно старый, но для исторических целей API для сторонних приложений для взаимодействия с API Xperia Home для этой конкретной функции был опубликован в прошлом году:
Xperia Home badge API теперь публично доступен
с образцом кода здесь:
существует также сторонняя библиотека, которая поддерживает большинство основных поставщиков телефонов, включая Xperia Главная API: