Mar*_*cus 34 notifications android sony count badge
借助索尼的Xperia Home,某些应用程序可以在应用程序图标上显示计数气泡或徽章.Facebook和Facebook Messenger都是这样做的,以及内置的电子邮件应用程序.
这已经解决了三星的发射器,但我还没有找到任何关于如何为索尼的发射器做这个的文档.
怎么做到呢?
Mar*_*cus 47
在看过Daniel Ochoa的三星发射器解决方案之后,我使用BadgeProvider来处理徽章,我开始为索尼的Xperia Home做同样的事情.这个答案直接来自我的博客.
我偶然发现了索尼的AppXplore,并用它来查看Facebook应用程序的许可.Facebook应用程序请求以下权限,这是在Sony设备上显示徽章的关键:
com.sonyericsson.home.permission.BROADCAST_BADGE
接下来,我浏览了所有可用的内容提供商,但我发现没有任何与应用程序图标徽章相关的信息.我在这个答案中运行命令以获取系统转储文件,并使用Notepad ++搜索"徽章".我找到了这个:
com.sonyericsson.home.action.UPDATE_BADGE:41be9a90 com.sonyericsson.home/.BadgeService $ BadgeReceiver filter 41be9858
因此,它使用Sony上的BroadcastReciever而不是三星的内容提供商进行处理.所以,我创建了一个我自己的虚拟BroadcastReciever,监听动作com.sonyericsson.home.action.UPDATE_BADGE,并发现附加内容传递给索尼的BadgeService.为此,我还需要一个权限,但在转储文件中很容易找到:
com.sonyericsson.home.permission.RECEIVE_BADGE
Facebook,电子邮件应用程序等发送的附加内容包括:
因此,事实证明,在启动器中的应用程序图标上显示徽章非常简单.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);
Run Code Online (Sandbox Code Playgroud)完成.一旦Intent在广播发射器应显示在您的应用程序图标徽章.
要再次删除徽章,只需发送一个新广播,这次SHOW_MESSAGE设置为false:
intent.putExtra("com.sonyericsson.home.intent.extra.badge.SHOW_MESSAGE", false);
Run Code Online (Sandbox Code Playgroud)既然MESSAGE是a String,您实际上可以在徽章中添加单词:
intent.putExtra("com.sonyericsson.home.intent.extra.badge.MESSAGE", "Testing");
Run Code Online (Sandbox Code Playgroud)
但我不会这样做因为它看起来很奇怪.
该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);
Run Code Online (Sandbox Code Playgroud)
我希望这对某人有所帮助!:)
Tad*_*tis 29
我将这个类用于三星,索尼和HTC设备(也可用https://gist.github.com/Tadas44/cdae2f5995f21bf1c27f).别忘了添加<uses-permission android:name="com.sonyericsson.home.permission.BROADCAST_BADGE" />到AndroidManifest.xml
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;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
63753 次 |
| 最近记录: |