Добавление значка уведомления на значок приложения в Android
Вы можете подумать, что это дублирующий вопрос, но я хочу, чтобы ответы были более конкретными, чем любые подобные вопросы.
Сначала это говорит, что, как Facebook, имеющий значок уведомления с устройством Samsung. Как Facebook добавляет номера значков на значок приложения в Android?, и это, оказывается, пусковая установка touchwiz, которая может быть пусковой установкой по умолчанию для устройств Samsung. когда я попытался протестировать свое устройство Samsung с помощью nova launcher. для этого нужно установить какое-нибудь стороннее программное обеспечение или Nova TestlaUnread.
Вот факт. я думал, что touchWiz добавляет значок для всех приложений, но когда я пытаюсь протестировать свое приложение, чтобы получить какое-либо уведомление, он не показывает никакого значка. как я узнал, что Samsung TouchWiz показывает приложение только для выбранного приложения, как указано здесь: UI help for Notification on icon
The question is: is there any way to let know the touchWiz to add badge to my app-icon?
Это для устройства Samsung,
с этими предыдущими аргументами кажется, что за значки в иконке приложения в android ответственны программы запуска разных производителей. Sony Experia использует Experia Home/Launcher в качестве запуска по умолчанию. в моем устройстве sony у них был какой-то значок в виде смс или пропущенных звонков или фейсбука.
The question is: like the previous question, is there any way to let know experia home to add badge to my app icon?
потому что я думал, что, возможно, взаимодействие с лаунчером кажется решением этого "добавления значка к значку приложения".
и есть это решение об этом псевдониме активности и время от времени меняющемся значке приложения, которое я считаю чепухой. Есть ли способ добавить значок к значку приложения в Android?
поэтому я ищу решение по взаимодействию с пусковыми установками, которое зависит от поставщика.
"Любое решение будет оценено, даже если бы я углубился в использование нативной разработки в Android"
Спасибо вперед
2 ответа
Я использую этот класс для устройств Samsung и Sony (также доступен 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;
}
}
В дополнение к решению Даниэля Очоа для Samsung (см. Комментарий к OP), я выяснил, как это сделать для устройств Sony.
Я писал об этом здесь. Я также разместил отдельный ТАК вопрос об этом здесь.
Устройства Sony используют класс с именем BadgeReciever
,
Объявить
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
установить в ложь:intent.putExtra("com.sonyericsson.home.intent.extra.badge.SHOW_MESSAGE", false);
Я исключил детали того, как я нашел это, чтобы краткий ответ, но все это доступно в блоге. Может быть, интересное чтение для кого-то.