我是靠谱客的博主 明亮飞鸟,最近开发中收集的这篇文章主要介绍android 为桌面图标添加数字角标android 为桌面图标添加数字角标,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

android 为桌面图标添加数字角标

我的github项目 BadgeForAppIcon
看完麻烦 star 一下

在某些app的设计中,产品经理总会想当然的提出为桌面图标添加数字角标的需求。作为一个开发者当然只能努力的去实现,然后你打开了百度。。。

一、“砖”

这种问题你会在百度上找到很多答案,拿来一块砖开心的就贴在了你的demo里,然后运气好的你拿起了你手里的huawei、sumsung,运气不好的朋友手里拿着oppo、vivo、xiaomi或其他
“运气不好”的原因很简单,你找的“砖”在这些设备上没用。
文章最后会吐槽一下为啥你搜到的方法不管用,下面直接给你块好用的“砖”。

二、支持列表

我的github项目 BadgeForAppIcon
看完麻烦 star 一下

手机厂商(launcher)是否支持(Y/N)launcher package name
HUAWEIYcom.huawei.android.launcher
XIOAMIY*com.miui.home
OPPOY*
VIVON*
GOOGLEY*com.google.android.apps.nexuslauncher
MEIZUN
SAMSUNGY*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 为桌面图标添加数字角标所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(42)

评论列表共有 0 条评论

立即
投稿
返回
顶部