Intereting Posts
Как использовать совместное использование совместного использования изображений для совместного использования изображений в Android? Com.google.android.gms.common.internal.safe parcel.safe parcelable не найден Устройство Sreenshot не работает в Android Debug Monitor OnGlobalLayoutListener: устаревание и совместимость Android SeekBar setProgress заставляет мой MediaPlayer пропускать Как сделать SearchView всегда расширенным в Android? Будет ли разумная защита этой политики в отношении LVL LVL? Android wifiManager.addNetwork возвращает -1 Как скомпилировать и запустить программу C / C ++ в системе Android Равномерно разнесенные пункты меню на Панели инструментов Установка цвета курсора EditText Как сохранить Hashmap для Android, чтобы он был повторно использован при перезапуске приложения с использованием общих настроек? Одиночный выбор в RecyclerView Какую библиотеку OCR Java я должен использовать в Android? Шрифты размыты / большие в Android Studio

Как отобразить количество уведомлений в значке приложения запуска

Samsung galaxy note 2 android version 4.1.2

Я знаю, что этот вопрос задавали раньше, и ответ был невозможен

Как отображать счетчик баллонов над иконкой запуска приложения на Android

Тем не менее вчера я обновил приложение facebook и начал показывать счетчик непрочитанных сообщений. Почему приложение facebook может и я не могу сделать это для своего приложения?

Значок facebook

Введите описание изображения здесь

Samsung galaxy note 2 android version 4.1.2

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

Android («ванильный» андроид без пользовательских пусковых установок и сенсорных интерфейсов) не позволяет изменять значок приложения, поскольку он плотно закрывается в .apk после компиляции программы. Невозможно изменить его программно с помощью стандартных API-интерфейсов. Вы можете достичь своей цели, используя виджет вместо значка. Виджеты настраиваются. Пожалуйста, прочтите это: http://www.cnet.com/8301-19736_1-10278814-251.html и этот http://developer.android.com/guide/topics/appwidgets/index.html . Также смотрите здесь: https://github.com/jgilfelt/android-viewbadger . Это может вам помочь.

Что касается номеров значков. Как я уже говорил, для этого нет стандартного способа. Но мы все знаем, что Android – это открытая операционная система, и мы можем делать все, что с ней нужно, поэтому единственный способ добавить номер значка – это либо использовать некоторые 3-х сторонние приложения или пользовательские пусковые установки, либо интерфейс Интерфейсы: интерфейс Samsung TouchWiz или Sony Xperia. Другие ответы используют эти возможности, и вы можете искать это в stackoverflow, например здесь . Но я повторю еще раз: для этого нет стандартного API, и я хочу сказать, что это плохая практика. Значок уведомления о значке приложения – это шаблон iOS, и он не должен использоваться в приложениях Android в любом случае. В Andrioid для уведомлений есть уведомления о статусе: http://developer.android.com/guide/topics/ui/notifiers/notifications.html Итак, если Facebook или кто-то другой используют это – это не общий шаблон или Тренд, который мы должны рассмотреть. Но если вы все равно настаиваете и не хотите использовать виджеты на главном экране, посмотрите здесь:

Как Facebook добавляет номера значков на значок приложения в Android?

Как вы видите, это не настоящее приложение для Facebook, это TouchWiz. В ванильном андроиде это может быть достигнуто с помощью Nova Launcher http://forums.androidcentral.com/android-applications/199709-how-guide-global-badge-notifications.html Итак, если вы где-нибудь увидите значки значков, убедитесь, что это Либо 3-сторонняя пусковая установка, либо сенсорный интерфейс (интерфейсная обертка). Возможно, когда-нибудь Google добавит эту возможность в стандартный Android API.

Он работает в программе samsung touchwiz

 public static void setBadge(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); } public 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; } 

ShortcutBadger – это библиотека, которая добавляет уровень абстракции над маркой устройства и текущей пусковой установкой и дает отличный результат. Работает с LG, Sony, Samsung, HTC и другими обычными пусковыми установками.

У него даже есть способ отображать счетчик значков в настольном ПК на чистых Android-устройствах.

Обновление значка в значке приложения так же просто, как и вызов:

 int badgeCount = 1; ShortcutBadger.applyCount(context, badgeCount); 

Он включает демонстрационное приложение, которое позволяет вам проверять его поведение.

Я выяснил, как это делается для устройств Sony.

Об этом я писал в блоге. Я также опубликовал отдельный SO-вопрос об этом здесь .


В устройствах Sony используется класс BadgeReciever .

  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); 

Я исключил детали о том, как я нашел это, чтобы ответить на короткий вопрос, но все это доступно в блоге. Может быть, интересно читать для кого-то.

Это образец и лучший способ для показа значка на значке запуска оповещений.

Добавьте этот класс в свою заявку

 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; } } 

==> MyGcmListenerService.java Используйте класс BadgeUtils, когда приходит уведомление.

 public class MyGcmListenerService extends GcmListenerService { private static final String TAG = "MyGcmListenerService"; @Override public void onMessageReceived(String from, Bundle data) { String message = data.getString("Msg"); String Type = data.getString("Type"); Intent intent = new Intent(this, SplashActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, intent, PendingIntent.FLAG_ONE_SHOT); Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); NotificationCompat.BigTextStyle bigTextStyle= new NotificationCompat.BigTextStyle(); bigTextStyle .setBigContentTitle(getString(R.string.app_name)) .bigText(message); NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this) .setSmallIcon(getNotificationIcon()) .setContentTitle(getString(R.string.app_name)) .setContentText(message) .setStyle(bigTextStyle) .setAutoCancel(true) .setSound(defaultSoundUri) .setContentIntent(pendingIntent); int color = getResources().getColor(R.color.appColor); notificationBuilder.setColor(color); NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); int unOpenCount=AppUtill.getPreferenceInt("NOTICOUNT",this); unOpenCount=unOpenCount+1; AppUtill.savePreferenceLong("NOTICOUNT",unOpenCount,this); notificationManager.notify(unOpenCount /* ID of notification */, notificationBuilder.build()); // This is for bladge on home icon BadgeUtils.setBadge(MyGcmListenerService.this,(int)unOpenCount); } private int getNotificationIcon() { boolean useWhiteIcon = (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP); return useWhiteIcon ? R.drawable.notification_small_icon : R.drawable.icon_launcher; } } 

И четкое уведомление из предпочтения, а также счетчик значков

  public class SplashActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_splash); AppUtill.savePreferenceLong("NOTICOUNT",0,this); BadgeUtils.clearBadge(this); } } 
 <uses-permission android:name="com.sonyericsson.home.permission.BROADCAST_BADGE" />