Intereting Posts
Фрагменты и уведомления: укажите различные действия из уведомлений; В зависимости от конфигурации экрана Как получить размер диалогового окна? Как реализовать RecyclerView с строками CardView в фрагменте с помощью TabLayout Приглашение в Facebook, Пригласить друзей Отладчик Android Studio не останавливается на контрольных точках в библиотечных модулях Trace: requestLayout () неправильно вызван? Как получить идентификатор приложения Android? Маржа, установленная программно на RadioButton, не применяется Слушайте изменения громкости на Android Android Как переписать фильтр для моего ArrayAdapter? Как сделать GPS-приложение для android с помощью kivy, pyjnius? ViewPager и база данных Невозможно записать вызов с помощью MediaRecorder Firebase Authentication FirebaseNetworkException: произошла сетевая ошибка (например, тайм-аут, прерванное соединение или недоступный хост) Перезапуск SystemUI с использованием am startervice

Как взаимодействовать с BadgeProvider на телефонах Samsung, чтобы добавить счет к значку приложения?

Samsung TWLauncher позволяет приложениям создавать значки значков приложений.

Это совершенно недокументировано! Об этом нигде не упоминается, и только несколько приложений используют его (например, Facebook, eBay).

Как вы используете эту функцию, чтобы добавить счет к значку своего приложения?

Solutions Collecting From Web of "Как взаимодействовать с BadgeProvider на телефонах Samsung, чтобы добавить счет к значку приложения?"

Сначала вам нужно добавить следующие разрешения в ваш файл AndroidManifest.xml.

<uses-permission android:name="com.sec.android.provider.badge.permission.READ" /> <uses-permission android:name="com.sec.android.provider.badge.permission.WRITE" /> 

Структура столбцов выглядит следующим образом:

 (integer) _id, (text) package, (text) class, (integer) badgecount, (blob) icon, (???) extraData 

Чтобы запросить ВСЕ результаты от BadgeProvider, выполните следующие действия:

 // This is the content uri for the BadgeProvider Uri uri = Uri.parse("content://com.sec.badge/apps"); Cursor c = getContentResolver().query(uri, null, null, null, null); // This indicates the provider doesn't exist and you probably aren't running // on a Samsung phone running TWLauncher. This has to be outside of try/finally block if (c == null) { return; } try { if (!c.moveToFirst()) { // No results. Nothing to query return; } c.moveToPosition(-1); while (c.moveToNext()) { String pkg = c.getString(1); String clazz = c.getString(2); int badgeCount = c.getInt(3); Log.d("BadgeTest", "package: " + pkg + ", class: " + clazz + ", count: " + String.valueOf(cnt)); } } finally { c.close(); } 

Чтобы добавить значок значка к значку приложения

 ContentValues cv = new ContentValues(); cv.put("package", getPackageName()); // Name of your activity declared in the manifest as android.intent.action.MAIN. // Must be fully qualified name as shown below cv.put("class", "com.example.badge.activity.Test"); cv.put("badgecount", 1); // integer count you want to display // Execute insert getContentResolver().insert(Uri.parse("content://com.sec.badge/apps"), cv); 

Если вы хотите очистить значок значка от значка

 ContentValues cv = new ContentValues(); cv.put("badgecount", 0); getContentResolver().update(Uri.parse("content://com.sec.badge/apps"), cv, "package=?", new String[] {getPackageName()}); 

NEW
Я создал проект с открытым исходным кодом, который вы можете импортировать в качестве библиотеки, чтобы помочь в этом. Он лицензирован как Apache, поэтому не стесняйтесь использовать его, как вам заблагорассудится.

Вы можете получить его отсюда: https://github.com/shafty023/SamsungBadger

Существует еще одна классная библиотека с открытым исходным кодом, которая поддерживает различные устройства: https://github.com/leolin310148/ShortcutBadger/

Добавьте эти разрешения для манифеста

 <!--for android badge--> <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS"/> <uses-permission android:name="com.android.launcher.permission.WRITE_SETTINGS"/> <!--for Samsung badge--> <uses-permission android:name="com.sec.android.provider.badge.permission.READ"/> <uses-permission android:name="com.sec.android.provider.badge.permission.WRITE"/> <!--for htc badge--> <uses-permission android:name="com.htc.launcher.permission.READ_SETTINGS"/> <uses-permission android:name="com.htc.launcher.permission.UPDATE_SHORTCUT"/> <!--for sony badge--> <uses-permission android:name="com.sonyericsson.home.permission.BROADCAST_BADGE"/> <!--for apex badge--> <uses-permission android:name="com.anddoes.launcher.permission.UPDATE_COUNT"/> 

Добавьте эти имена пакетов в свой класс:

  final String HOME_PACKAGE_SONY = "com.sonyericsson.home"; final String HOME_PACKAGE_SAMSUNG = "com.sec.android.app.launcher"; final String HOME_PACKAGE_LG = "com.lge.launcher2"; final String HOME_PACKAGE_HTC = "com.htc.launcher"; final String HOME_PACKAGE_ANDROID = "com.android.launcher"; final String HOME_PACKAGE_APEX = "com.anddoes.launcher"; final String HOME_PACKAGE_ADW = "org.adw.launcher"; final String HOME_PACKAGE_ADW_EX = "org.adwfreak.launcher"; final String HOME_PACKAGE_NOVA = "com.teslacoilsw.launcher"; 

для использования :

  // just put your pachage and main activity class path String classPath = "ir.faasaa.resa.MainActivity"; ContentValues cv = new ContentValues(); cv.put("package", context.getPackageName()); cv.put("class", classPath); cv.put("badgecount", count); context.getContentResolver().insert(Uri.parse(HOME_PACKAGE_SAMSUNG), cv); 

Благодаря ShortcutBadger

В андроиде у нас нет подхода стиля в стиле значков, так как iOS, но некоторые производители поддерживают отображение значков на значках приложений.

Поддержка Sony и HTC.

Пример значка стиля значка в приложении в Android

Sony и HTC поддерживают добавление значка к значку приложения.

Для Sony

 <uses-permission android:name="com.sonyericsson.home.permission.BROADCAST_BADGE" /> Intent intent= new Intent("com.sonyericsson.home.action.UPDATE_BADGE"); intent.putExtra("com.sonyericsson.home.intent.extra.badge.ACTIVITY_NAME", Class Name); intent.putExtra("com.sonyericsson.home.intent.extra.badge.SHOW_MESSAGE", true); intent.putExtra("com.sonyericsson.home.intent.extra.badge.MESSAGE",number); intent.putExtra("com.sonyericsson.home.intent.extra.badge.PACKAGE_NAME", packageName); sendBroadcast(intent); 

Для HTC:

 <uses-permission android:name="com.htc.launcher.permission.READ_SETTINGS" /> <uses-permission android:name="com.htc.launcher.permission.UPDATE_SHORTCUT" /> Intent updateIntent = new Intent("com.htc.launcher.action.UPDATE_SHORTCUT"); updateIntent.putExtra("packagename", packageName); updateIntent.putExtra("count", number); this.sendBroadcast(updateIntent); Intent setNotificationIntent = new Intent("com.htc.launcher.action.SET_NOTIFICATION"); ComponentName localComponentName = new ComponentName(packageName, className); setNotificationIntent.putExtra("com.htc.launcher.extra.COMPONENT", localComponentName.flattenToShortString()); setNotificationIntent.putExtra("com.htc.launcher.extra.COUNT", number); this.sendBroadcast(setNotificationIntent); 

Я использую этот класс для устройств 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; } } 

Существует еще один инструмент, который можно использовать для устройств Xperia

 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.putExtra("com.sonyericsson.home.intent.extra.badge.MESSAGE", "10"); 

Подробнее см. Ниже.

http://www.marcusforsberg.net/blog/android-notification-badge-app-icon-sony/