桌面图标未读消息(小米,sony,三星手机)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了桌面图标未读消息(小米,sony,三星手机)相关的知识,希望对你有一定的参考价值。
新消息来了,在桌面的Laucher图标上显示新消息数
/** * 应用桌面图标未读消息显示工具类 * 只支持 小米,三星和索尼 */ public class BadgeUtil { final static String LAUNCHER_ACTIVITY_NAME = "com.wenki.example.activity.SplashActivity"; public static void setBadgeCount(Context context, int count) { if (count <= 0) { count = 0; } else { count = Math.max(0, Math.min(count, 99)); } if (Build.MANUFACTURER.equalsIgnoreCase("sony")) { sendToSony(context, count); } else if (Build.MANUFACTURER.toLowerCase().contains("samsung")) { sendToSamsumg(context, count); } else if (isMIUI()) { sendToXiaoMi(context, count); } else { LogUtils.d("BadgeUtil : Badge not support"); } } public static void clearBadgeCount(Context context) { setBadgeCount(context, 0); } private static void sendToXiaoMi(Context context, int count) { NotificationManager mNotificationManager = (NotificationManager) context .getSystemService(Context.NOTIFICATION_SERVICE); Notification.Builder builder = new Notification.Builder(context) .setContentTitle("Title").setContentText("Content Text").setSmallIcon(R.drawable.app_icon); try { Notification notification = builder.getNotification(); Field field = notification.getClass().getDeclaredField("extraNotification"); Object extraNotification = field.get(notification); Method method = extraNotification.getClass().getDeclaredMethod("setMessageCount", int.class); method.invoke(extraNotification, count); mNotificationManager.notify(1001, notification); } catch (Exception e) { Intent localIntent = new Intent("android.intent.action.APPLICATION_MESSAGE_UPDATE"); localIntent.putExtra("android.intent.extra.update_application_component_name", context.getPackageName() + "/" + LAUNCHER_ACTIVITY_NAME); localIntent.putExtra("android.intent.extra.update_application_message_text", String.valueOf(count == 0 ? "" : count)); context.sendBroadcast(localIntent); } } private static void sendToSony(Context context, int count) { boolean isShow = true; if (count == 0) { isShow = false; } Intent localIntent = new Intent(); localIntent.setAction("com.sonyericsson.home.action.UPDATE_BADGE"); localIntent.putExtra("com.sonyericsson.home.intent.extra.badge.SHOW_MESSAGE", isShow);//是否显示 localIntent.putExtra("com.sonyericsson.home.intent.extra.badge.ACTIVITY_NAME", LAUNCHER_ACTIVITY_NAME);//启动页 localIntent.putExtra("com.sonyericsson.home.intent.extra.badge.MESSAGE", String.valueOf(count));//数字 localIntent.putExtra("com.sonyericsson.home.intent.extra.badge.PACKAGE_NAME", context.getPackageName());//包名 context.sendBroadcast(localIntent); } private static void sendToSamsumg(Context context, int count) { 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", LAUNCHER_ACTIVITY_NAME); 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; } private static boolean isMIUI() { String code = getSystemProperty("ro.miui.ui.version.code"); String name = getSystemProperty("ro.miui.ui.version.name"); return !TextUtils.isEmpty(code) && !TextUtils.isEmpty(name); } public static String getSystemProperty(String propName) { String line; BufferedReader input = null; try { Process p = Runtime.getRuntime().exec("getprop " + propName); input = new BufferedReader(new InputStreamReader(p.getInputStream()), 1024); line = input.readLine(); input.close(); } catch (IOException ex) { return null; } finally { if (input != null) { try { input.close(); } catch (IOException e) { // e.printStackTrace(); } } } return line; } }
其中 LAUNCHER_ACTIVITY_NAME 是启动页,也可以用 getLauncherClassName()方法获取。
小米的MIUI6.0以上版本,必须使用通知栏的方式实现,而6.0之前是发广播的形式。isMIUI()方法判断了所有的MIUI系统,包括刷机的。
Sony没有测试机,未测试。小米三星测试有效
以上是关于桌面图标未读消息(小米,sony,三星手机)的主要内容,如果未能解决你的问题,请参考以下文章