概述
android 为桌面图标添加数字角标
我的github项目 BadgeForAppIcon
看完麻烦 star 一下
在某些app的设计中,产品经理总会想当然的提出为桌面图标添加数字角标的需求。作为一个开发者当然只能努力的去实现,然后你打开了百度。。。
一、“砖”
这种问题你会在百度上找到很多答案,拿来一块砖开心的就贴在了你的demo里,然后运气好的你拿起了你手里的huawei、sumsung,运气不好的朋友手里拿着oppo、vivo、xiaomi或其他。
“运气不好”的原因很简单,你找的“砖”在这些设备上没用。
文章最后会吐槽一下为啥你搜到的方法不管用,下面直接给你块好用的“砖”。
二、支持列表
我的github项目 BadgeForAppIcon
看完麻烦 star 一下
手机厂商(launcher) | 是否支持(Y/N) | launcher package name |
---|---|---|
HUAWEI | Y | com.huawei.android.launcher |
XIOAMI | Y* | com.miui.home |
OPPO | Y* | |
VIVO | N* | |
Y* | com.google.android.apps.nexuslauncher | |
MEIZU | N | |
SAMSUNG | Y* | com.sec.android.app.launcher |
*:有特殊情况,会在第三节中详细说明
2.1、判断当前launcher
这里需要注意的是,是否支持角标并不与手机厂商有关,而是你当前使用的launcher开发厂商有关。
- 比如:你用着华为手机,却用着魅族的launcher,那肯定是不会成功的显示出桌面角标的
- 相反的,你用着某一款手机却用着华为的launcher,一样可以显示出桌面图标角标
获取当前launcher包名的方法
public static String getLauncherPackageName() {
//获取ApplicationContext
final Context context = App.getInstance().getBaseContext();
final Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
final ResolveInfo res = context.getPackageManager().resolveActivity(intent, 0);
if (res.activityInfo == null) {
// should not happen. A home is always installed.
return null;
}
if (res.activityInfo.packageName.equals("android")) {
return null;
} else {
return res.activityInfo.packageName;
}
}
三、方法实现
3.1、华为(荣耀)
官方文档:https://developer.huawei.com/consumer/cn/devservice/doc/30802
private void setHUAWEIIconBadgeNum(int count) throws Exception {
final Context context = App.getInstance().getBaseContext();
Bundle bunlde = new Bundle();
bunlde.putString("package", context.getPackageName());
bunlde.putString("class", CappUtils.getLaunchIntentForPackage());
bunlde.putInt("badgenumber", count);
context.getContentResolver().call(Uri.parse("content://com.huawei.android.launcher.settings/badge/"), "change_badge", null, bunlde);
}
3.2、小米
官方文档:https://dev.mi.com/console/doc/detail?pId=939
private Notification setXIAOMIIconBadgeNum(int count, Notification notification) throws Exception {
Field field = notification.getClass().getDeclaredField("extraNotification");
Object extraNotification = field.get(notification);
Method method = extraNotification.getClass().getDeclaredMethod("setMessageCount", int.class);
method.invoke(extraNotification, count);
return notification;
}
小米实现时,需要注意一下几点:
- 必须发送notification
- 只支持MIUI6-10(网上有针对6以下的砖,我没法验证,所以这里就不贴出来了)
- 当APP处于前台时,数字会自动清空(因此,APP必须处于后台时才可以设置成功)
为什么这么多限制,与我用的邮箱或那些聊天软件不一样?
- 我会在最后一节吐槽这个事
3.3、OPPO
首先,官方客服和我说他们可以支持,但需要申请。
而抱歉的是截止目前我还没有得到具体的方法,因为我们还在它的申请流程中。。
具体申请流程请去OPPO开放平台找他们的人工客服获取申请方法。
3.4、VIVO
客服直接说了:不支持 & 没渠道申请
3.5、SAMSUNG
网上的方法难得的好用,但没有找到官方的回复,大家凑活用吧
private void setSAMSUNGIconBadgeNum(int count) throws Exception {
final Context context = App.getInstance().getBaseContext();
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", CappUtils.getLaunchIntentForPackage());
context.sendBroadcast(intent);
}
3.6、MEIZU
不支持
3.7、google
Android8.0开始支持了,但没有那么理想的效果,只能在图标上显示一个点;
长按这个点,能弹出一个小pop告诉你有多少消息。
private void setGoogleIconBadgeNum(int count) throws Exception {
final Context context = App.getInstance().getBaseContext();
if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.O) {
throw new Exception(ERROR_LAUNCHER_NOT_SUPPORT_ + "Google");
}
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", CappUtils.getLaunchIntentForPackage()); // com.test. badge.MainActivity is your apk main activity
context.sendBroadcast(intent);
}
四、吐槽
4.1、
当碰到这个问题时,我因为没找到合适的砖,就去了github,结果也差不多。
最后没办法只能反编译某个通信软件的代码瞅瞅,它是咋干的。
打开后看着似曾相识的代码,才发现和我从github上看的都一样。。。
- 比如小米的方法,在反编译的源码中并不需要我在3.2中写的那么多限制,但为啥它就能开心的玩呢?因为它是*信!
4.2、
抱着疑问的态度我不得不和手机厂商客服联系了,我首先就找了VIVO
客服妹子回答的比较干脆:不支持、没渠道申请
为啥那个什么信能行?
- 你要是有它的用户量,VIVO会主动支持你的(这句话是我自己想的)
4.3、各厂家客服
我确实看出来某星在中国的业务不太好了,没有人工客服渠道,发的邮件如石沉大海。。
HUAWEI没的说,提了工单,周末也能及时回复。
O、V两家人工都挺热情的,就是邮件有点慢
一加的客服很热情,但因为是技术问题,所以她推荐我发邮件咨询。发邮件的结果“拒收”
最后
以上就是明亮飞鸟为你收集整理的android 为桌面图标添加数字角标android 为桌面图标添加数字角标的全部内容,希望文章能够帮你解决android 为桌面图标添加数字角标android 为桌面图标添加数字角标所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复