質問: アプリランチャーアイコンに通知数を表示する方法 サムスンギャラクシーノート2 androidのバージョン4.1.2私はこの質問が以前にされたと答えができなかったことを知っています androidのアプリケーションランチャーアイコンの上にバルーンカウンターを表示する方法 それにもかかわらず、昨日私はfacebookのアプリを更新し、それは未読メッセージのプライベートメッセージのカウンターを表示し始めました。 facebookアプリはどうしてできるのでしょうか、それとも私のアプリにはできません。サムスンギャラクシーノート2 androidのバージョン4.1.2
回答: これは、通知ランチャーアイコンにバッジを表示するためのサンプルおよび最良の方法です。アプリケーションにこのクラスを追加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" />