Как добавить значок значка / счетчик приложений на устройства Sony Xperia?

С Xperia Home от Sony некоторые приложения имеют возможность отображать значок пузыря или значок на значке приложения. Facebook и Facebook Messenger делают это, а также встроенное приложение электронной почты.

Это было решено для запуска программы Samsung , но я не сталкивался с какой-либо документацией о том, как это сделать для пусковой установки Sony.

Как это можно сделать?

Выбрав решение Daniel Ochoa для запуска программы Samsung, которое использует BadgeProvider для обработки значков, я решил сделать то же самое для Xperia Home от Sony. Этот ответ берется непосредственно из моего блога .

Как я это понял – для всех, кто интересуется

Я наткнулся на AppXplore от Sony и использовал его, чтобы проверить разрешение приложения Facebook. Приложение Facebook запрашивает следующее разрешение, которое является ключом к отображению значков на устройствах Sony:

com.sonyericsson.home.permission.BROADCAST_BADGE

Затем я просмотрел все доступные контент-провайдеры, но я не нашел ничего, что связано с значками значков приложений. Я запустил команду в этом ответе, чтобы получить файл дампа системы и искал «значок» с помощью Notepad ++. Я нашел это:

Com.sonyericsson.home.action.UPDATE_BADGE: 41be9a90 com.sonyericsson.home / .BadgeService $ Фильтр BadgeReceiver 41be9858

Таким образом, он обрабатывается с использованием BroadcastReciever на Sony, в отличие от поставщика контента Samsung. Итак, я создал фиктивный собственный BroadcastReciever, прислушиваясь к действию com.sonyericsson.home.action.UPDATE_BADGE и обнаружил, что дополнительные функции переданы в BadgeService от Sony. Для этого мне также понадобилось разрешение, но это было легко найти в файле дампа:

com.sonyericsson.home.permission.RECEIVE_BADGE

Дополнительные услуги, отправленные Facebook, приложение электронной почты и т. Д.:

  • Com.sonyericsson.home.intent.extra.badge.ACTIVITY_NAME – название основной активности вашего приложения, android.intent.action.MAIN. Это значит, что пусковая установка знает, какой значок показывать значок.
  • Com.sonyericsson.home.intent.extra.badge.SHOW_MESSAGE – логическое указание, если мы хотим показать значок или нет (что мы делаем!)
  • Com.sonyericsson.home.intent.extra.badge.MESSAGE – строка (а не целое число – мне потребовалось некоторое время, чтобы понять …) с номером для показа.
  • Com.sonyericsson.home.intent.extra.badge.PACKAGE_NAME – имя вашего пакета приложений.

Как показать значки на значке запуска приложения на устройствах Sony Xperia

Таким образом, оказывается, что очень просто показать значок на вашем значке приложения в панели запуска. ИМО это гораздо более прямолинейно, чем для запуска в Samsung. Вот пошаговое руководство (и это не долго!)

  1. com.sonyericsson.home.permission.BROADCAST_BADGE разрешение com.sonyericsson.home.permission.BROADCAST_BADGE в файле манифеста:

  2. Трансляция 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); 
  3. Готово. Когда это Intent транслируется, пусковая установка должна показывать значок на вашем значке приложения.

  4. Чтобы снова удалить значок, просто отправьте новую трансляцию, на этот раз с 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 для сторонних приложений для взаимодействия с Xperia Home API для этой конкретной функции был обнародован в прошлом году:

API-интерфейс API-интерфейса Xperia теперь общедоступен

С примером кода здесь:

sonyxperiadev / домашний значок

Существует также сторонняя библиотека, которая поддерживает большинство основных поставщиков телефонов, включая Xperia Home API:

leolin310148 / ShortcutBadger