当前位置: 首页 > 知识库问答 >
问题:

在Android应用程序图标上添加红点

宋鸿云
2023-03-14

你可能认为这是一个重复的问题,但我希望答案比任何类似的问题都更具体。

首先,它说,就像Facebook与三星设备红点。Facebook如何在Android的应用程序图标上添加徽章号码?.或者Nova TestlaUnread。

事实是这样的。我以为touchWiz正在为所有应用程序添加徽章,但当我尝试使用我的应用程序进行测试以获得一些通知时,它没有显示任何徽章。我发现三星TouchWiz只向所选应用程序显示应用程序,如下所述:图标通知的UI帮助

问题是:是否有任何方法让知道触摸Wiz添加徽章到我的应用程序图标?这是为三星设备,

有了前面的论点,似乎不同供应商的启动器是负责Android应用图标中徽章的人。索尼益百利使用益百利主页/发射器作为其默认发射器。在我的索尼设备中,他们有一些徽章在那里短信或未接来电或脸书。

问题是:像上一个问题一样,有没有办法让experia home知道如何在我的应用图标上添加徽章

因为我在想,与启动器交互似乎是“将徽章添加到应用程序图标”的解决方案。

还有一个关于这个活动别名和不时改变应用程序图标的解决方案,我认为这是垃圾。有办法添加徽章到Android中的应用程序图标吗?

所以我正在寻找与特定于供应商的启动器交互的解决方案。

任何解决方案都将受到赞赏,即使我在android中使用本机开发

前面谢谢


共有2个答案

郑曜灿
2023-03-14

除了丹尼尔·奥乔亚为三星提供的解决方案(见OP评论),我还想出了索尼设备是如何做到这一点的。

我在这里写过博客。我也在这里发布了一个单独的SO问题。

索尼设备使用名为BadgeReceiver的类。

>

  • 在清单文件中声明com.sonyericsson.home.permission.BROADCAST_BADGE权限:

    意图广播到接收器

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

    完成。一旦这个Intent被广播,启动器应该在你的应用程序图标上显示一个徽章。

    要再次移除徽章,只需发送一个新的广播,这次将SHOW\u MESSAGE设置为false:

    intent.putExtra("com.sonyericsson.home.intent.extra.badge.SHOW_MESSAGE", false);
    

    我已经排除了关于我是如何找到这个的细节,以保持答案的简短,但这些都可以在博客上找到。对某人来说可能是一本有趣的书。

  • 贝阳泽
    2023-03-14

    我对三星和索尼设备(也可提供)使用该类https://gist.github.com/Tadas44/cdae2f5995f21bf1c27f).别忘了添加

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

     类似资料:
    • 或者 我还尝试在没有文件的情况下实现这一点,结果成功了。 如何添加带有文件的应用程序图标?

    • 我知道这里有几个问是否有可能添加徽章到Android应用程序,他们都以否的答案结束... 但不知何故,最新的Facebook Android测试版似乎做了一些事情,至少看起来像一个徽章,即使从技术上讲,它并不完全是这样。 在那篇文章中,一位评论者说它与TouchWiz有某种联系。在这里,他们还提到它是“S3TouchWiz果冻豆插件”的一个特性。 我仍然希望了解如何做到这一点,以及是否有一些API

    • 我正在制作一个React原生应用程序。我想自定义应用程序图标(意思是你点击启动应用程序的图标)。我已经在谷歌上搜索过了,但我不断地发现不同类型的图标,它们指的是不同的东西。我如何将这些类型的图标添加到应用程序中?

    • 创建图标文件 我们建设以创建 Eclipse 程序图标为例 进入图标存放目录|:cd /usr/share/applications 创建文件并编辑:sudo gedit eclipse.desktop [Desktop Entry] Name=eclipse Name[zh_CN]=eclipse Comment=eclipse Client Exec=/usr/programa/tools/e

    • 我试图在Firebase中创建一个动态链接,当我选择android应用程序时,它显示一个错误,说“将SHA-1添加到这个android应用程序”,我已经添加了一个凭据,但我不确定我到底如何“将SHA-1添加到应用程序” 这是怎么做到的?

    • 我需要在我的应用程序图标上显示徽章 我所尝试的: > 2.我已经浏览了许多已经在stackoverflow上的可用答案,如 如何在应用程序启动器图标中显示通知计数 我们可以在android应用程序图标(如iphone)上显示徽章号码吗? 如何在Redmi上使用应用程序图标显示徽章计数? 在android应用程序图标上添加未读通知徽章 有没有办法在Android系统中为应用程序图标添加徽章? 所有这