【问题标题】:How to show badge count with app icon on Redmi?如何在 Redmi 上使用应用程序图标显示徽章数量?
【发布时间】:2016-12-05 17:58:33
【问题描述】:

我可以使用以下代码在三星设备上显示带有应用程序图标的徽章计数 -

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

    Intent intent = new Intent("android.intent.action.BADGE_COUNT_UPDATE");
    intent.putExtra("badge_count", badgeCount);
    intent.putExtra("badge_count_package_name", componentName.getPackageName());
    intent.putExtra("badge_count_class_name", componentName.getClassName());
sendBroadcast(intent);

但我无法在 Redmi 设备上实现这一点,尽管 Facebook、Whatsapp 等能够做到。如果您知道用于广播的操作意图和附加内容,请告诉我。感谢您的帮助。

【问题讨论】:

  • 你能在 MI 上显示徽章吗?如果是的话,你能分享一下怎么做吗?

标签: android badge


【解决方案1】:

在小米/小米手机上显示徽章的代码

public static final String INTENT_ACTION = "android.intent.action.APPLICATION_MESSAGE_UPDATE";
public static final String EXTRA_UPDATE_APP_COMPONENT_NAME = "android.intent.extra.update_application_component_name";
public static final String EXTRA_UPDATE_APP_MSG_TEXT = "android.intent.extra.update_application_message_text";
private ResolveInfo resolveInfo;

@Override
public void executeBadge(Context context, ComponentName componentName, int badgeCount) throws ShortcutBadgeException {
    try {
        Class miuiNotificationClass = Class.forName("android.app.MiuiNotification");
        Object miuiNotification = miuiNotificationClass.newInstance();
        Field field = miuiNotification.getClass().getDeclaredField("messageCount");
        field.setAccessible(true);
        try {
            field.set(miuiNotification, String.valueOf(badgeCount == 0 ? "" : badgeCount));
        } catch (Exception e) {
            field.set(miuiNotification, badgeCount);
        }
    } catch (Exception e) {
        Intent localIntent = new Intent(
                INTENT_ACTION);
        localIntent.putExtra(EXTRA_UPDATE_APP_COMPONENT_NAME, componentName.getPackageName() + "/" + componentName.getClassName());
        localIntent.putExtra(EXTRA_UPDATE_APP_MSG_TEXT, String.valueOf(badgeCount == 0 ? "" : badgeCount));
        if (BroadcastHelper.canResolveBroadcast(context, localIntent)) {
            context.sendBroadcast(localIntent);
        }
    }
    if (Build.MANUFACTURER.equalsIgnoreCase("Xiaomi")) {
        tryNewMiuiBadge(context, badgeCount);
    }
}

@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
private void tryNewMiuiBadge(Context context, int badgeCount) throws ShortcutBadgeException {
    if (resolveInfo == null) {
        Intent intent = new Intent(Intent.ACTION_MAIN);
        intent.addCategory(Intent.CATEGORY_HOME);
        resolveInfo = context.getPackageManager().resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY);
    }

    if (resolveInfo != null) {
        NotificationManager mNotificationManager = (NotificationManager) context
                .getSystemService(Context.NOTIFICATION_SERVICE);
        Notification.Builder builder = new Notification.Builder(context)
                .setContentTitle("")
                .setContentText("")
                .setSmallIcon(resolveInfo.getIconResource());
        Notification notification = builder.build();
        try {
            Field field = notification.getClass().getDeclaredField("extraNotification");
            Object extraNotification = field.get(notification);
            Method method = extraNotification.getClass().getDeclaredMethod("setMessageCount", int.class);
            method.invoke(extraNotification, badgeCount);
            mNotificationManager.notify(0, notification);
        } catch (Exception e) {
            throw new ShortcutBadgeException("not able to set badge", e);
        }
    }
}

这是从project link上的ShortcutBadger 应用程序的github 复制的代码(我不知道使用此代码的许可/权限)

Mi specific badge showing file code

【讨论】:

    【解决方案2】:

    也许,用户需要从设置中明确启用该选项。参考这里:badge count on launcher icon

    【讨论】:

    • 感谢您的回复。你是对的,他们可能必须启用,但我面临的挑战是我无法弄清楚我必须使用什么权限字符串以及我必须为 Redmi 设置什么意图字符串。正如我在三星、HTC 和索尼发现的那样,它因制造商而异。在 Redmi 上找不到任何有用的文档。
    猜你喜欢
    • 1970-01-01
    • 2020-09-10
    • 1970-01-01
    • 2013-10-11
    • 2019-04-22
    • 2017-03-02
    • 2017-03-08
    • 2012-12-25
    • 1970-01-01
    相关资源
    最近更新 更多