Intereting Posts
Сообщения с высоким приоритетом GCM, не принятые в режиме глубокого холостого хода Начать работу с помощью пользовательского действия Где разместить текстовые файлы в каталоге на Android SDK Manager.exe не работает Как я могу увидеть журнал ошибок (logcat) для Android в Eclipse? Android Studio – JAVA_HOME не указывает на действительную установку JVM Сохранить растровое изображение в местоположении Поддерживает ли Android файлы .apk? Если да где? Fit ImageSpan для высоты строки TextView Android ViewPager's onPageScrollStateChanged никогда не вызывается Фоновая служба для реагирования на собственный андроид Как получить доступ к представлениям оригинальной активности из созданной фоновой службы Android Глубокая ссылка на PlayStore вместо моего приложения на некоторых устройствах ExpandableListView дочерний кликер-прослушиватель не работает Когда край прокрутки просматривается при прокрутке в android

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

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" />