Ответ 1
После просмотра решения Daniel Ochoa для планшета Samsung, в котором используется BadgeProvider для обработки значков, я решил сделать то же самое для Sony Xperia Home. Этот ответ берется непосредственно из моего блога.
Как я понял это - для всех, кого интересует
Я наткнулся на Sony AppXplore и использовал его, чтобы проверить разрешение приложения 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 Content Provider. Итак, я создал фиктивный собственный BroadcastReciever, прислушиваясь к действию com.sonyericsson.home.action.UPDATE_BADGE и нашел дополнительные функции, переданные Sony BadgeService. Для этого мне также понадобилось разрешение, но это было легко найти в файле дампа:
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 - a boolean, указывающий, хотим ли мы показывать значок или нет (что мы делаем!)
- com.sonyericsson.home.intent.extra.badge.MESSAGE - строка (а не целое число - мне потребовалось некоторое время, чтобы понять...) с номером для показа.
- com.sonyericsson.home.intent.extra.badge.PACKAGE_NAME - название вашего пакета приложений.
Как показать значки на значке запуска приложения на устройствах Sony Xperia
Итак, оказывается, что очень просто показать значок на иконке вашего приложения в панели запуска. ИМО это гораздо более прямолинейно, чем для запуска 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);
Я надеюсь, что это кому-то помогло!:)