在看到 Daniel Ochoa 的三星启动器解决方案(使用 BadgeProvider 来处理徽章)后,我开始为索尼的 Xperia Home 做同样的事情。这个答案是直接from my blog拍的。
我是怎么想出来的 - 对于任何感兴趣的人
我偶然发现了Sony's AppXplore,并用它来检查 Facebook 应用程序的权限。
Facebook 应用请求以下权限,这是在 Sony 设备上显示徽章的关键:
com.sonyericsson.home.permission.BROADCAST_BADGE
接下来,我查看了all available content providers,但没有发现与应用图标徽章相关的内容。
我运行command in this answer 以获取系统转储文件并使用记事本++ 搜索“徽章”。我发现了这个:
com.sonyericsson.home.action.UPDATE_BADGE:
41be9a90 com.sonyericsson.home/.BadgeService$BadgeReceiver 过滤器 41be9858
因此,它是使用 Sony 上的 BroadcastReciever 处理的,而不是三星的 Content Provider。因此,我创建了一个自己的虚拟 BroadcastReciever,监听动作 com.sonyericsson.home.action.UPDATE_BADGE,并发现附加信息传递给了 Sony 的 BadgeService。
为此,我还需要一个权限,但这很容易在转储文件中找到:
com.sonyericsson.home.permission.RECEIVE_BADGE
Facebook、电子邮件应用程序等发送的附加内容是:
-
com.sonyericsson.home.intent.extra.badge.ACTIVITY_NAME -
您的应用的主要活动的名称,android.intent.action.MAIN。这是
所以启动器知道在哪个图标上显示徽章。
-
com.sonyericsson.home.intent.extra.badge.SHOW_MESSAGE - 一个
布尔值,指示我们是否要显示徽章(我们会这样做!)
-
com.sonyericsson.home.intent.extra.badge.MESSAGE - 一个字符串
(不是整数 - 我花了一段时间才意识到......)与数字
展示。
-
com.sonyericsson.home.intent.extra.badge.PACKAGE_NAME - 您的应用程序包的名称。
如何在 Sony Xperia 设备上的应用启动器图标上显示徽章
因此,在启动器中的应用程序图标上显示徽章非常简单。 IMO 它比三星的发射器更直接。
这是一个分步指南(而且不长!)
在清单文件中声明 com.sonyericsson.home.permission.BROADCAST_BADGE 权限:
-
将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);
完成。广播此Intent 后,启动器应在您的应用程序图标上显示一个徽章。
-
要再次移除徽章,只需发送一个新广播,这次将 SHOW_MESSAGE 设置为 false:
intent.putExtra("com.sonyericsson.home.intent.extra.badge.SHOW_MESSAGE", false);
很高兴知道
消息是一个字符串!
由于MESSAGE 是String,您实际上可以在徽章中添加单词:
intent.putExtra("com.sonyericsson.home.intent.extra.badge.MESSAGE", "Testing");
但我不会这样做,因为它看起来很奇怪。
您可以访问所有应用程序!
BROADCAST_BADGE 权限不仅可以让您访问自己应用的图标,还可以访问所有图标。例如,以下是设置 Facebook 徽章的方法:
Intent intent = new Intent();
intent.setAction("com.sonyericsson.home.action.UPDATE_BADGE");
intent.putExtra("com.sonyericsson.home.intent.extra.badge.ACTIVITY_NAME", "com.facebook.katana.LoginActivity");
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.facebook.katana");
sendBroadcast(intent);
我希望这对某人有所帮助! :)