Как добавить значок уведомления / счет в значок приложения на устройствах 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. Вот пошаговое руководство (и это не долго!)

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

Xperia Home badge API теперь публично доступен

с образцом кода здесь:

sonyxperiadev/главная-значок

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

leolin310148 / ShortcutBadger