android 为桌面图标添加数字角标
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() {//获取ApplicationContextfinal 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 activitycontext.sendBroadcast(intent);}
四、吐槽
4.1、
当碰到这个问题时,我因为没找到合适的砖,就去了github,结果也差不多。
最后没办法只能反编译某个通信软件的代码瞅瞅,它是咋干的。
打开后看着似曾相识的代码,才发现和我从github上看的都一样。。。
- 比如小米的方法,在反编译的源码中并不需要我在3.2中写的那么多限制,但为啥它就能开心的玩呢?因为它是*信!
4.2、
抱着疑问的态度我不得不和手机厂商客服联系了,我首先就找了VIVO
客服妹子回答的比较干脆:不支持、没渠道申请
为啥那个什么信能行?
- 你要是有它的用户量,VIVO会主动支持你的(这句话是我自己想的)
4.3、各厂家客服
我确实看出来某星在中国的业务不太好了,没有人工客服渠道,发的邮件如石沉大海。。
HUAWEI没的说,提了工单,周末也能及时回复。
O、V两家人工都挺热情的,就是邮件有点慢
一加的客服很热情,但因为是技术问题,所以她推荐我发邮件咨询。发邮件的结果“拒收”
android 为桌面图标添加数字角标相关推荐
- Andoid 桌面icon添加数字角标
产品经理拿着iPhone对我说,"这加上角标",转身就走了. 在Android系统中,是不支持BadgeNumber的,也就是原生Android系统是没有类似于ios 桌面icon ...
- Android Launcher桌面图标显示数字
之前一直以为是应用本身在对图标进行修改,看了源码之后发现其实主要的工作并不是应用自己完成的,主要的工作在是launcher里面完成的. 关于系统里面类似未读短信的具体处理流程如下: 原理 一个应用要实 ...
- Android 桌面图标添加未读消息角标APP角标最佳实践
Android 桌面图标添加未读消息角标APP角标最佳实践 本项目的完整演示代码 https://github.com/benchegnzhou/AndroidDevelomentArtDemo 最近 ...
- 手机计算机数字显示在桌面上,手机桌面上的应用如何取消显示的数字角标
手机桌面上的应用如何取消显示的数字角标很多小伙伴都还不知道,下面IEfans小编为大家整理了取消显示的数字角标的流程一览,怎么取消显示的数字角标,一起来看看吧! 方法/步骤分享: 1.首先,点击手机桌 ...
- 【Delphi】Android 桌面图标添加快捷菜单功能
目录 一.为什么需要桌面图标长按快捷菜单 二.实现Android桌面图标快捷菜单 第一步:Delphi 创建一个 FMX 工程文件:ShortCut_Demo.dpr 第二步:编辑项目中的 Andro ...
- Mui的APPLOGO数字角标小米问题
之前写了篇博客,生成jar包并添加进项目离线打包安卓APP,实现APP上LOGO的数字角标,但是最近有用户寄过来一台小米max3,因为APP启动后执行到显示数字角标的时候会崩. 通过Android S ...
- uni-app消息推送华为不显示数字角标???
操作过程: 1. 将设备的角标显示方式改为数字角标 2. 在uni-app代码中设置角标: plus.runtime.setBadgeNumber(1) //添加角标 发现App的角标并没有显示数字. ...
- MUI-list(列表),普通列表、带箭头列表、带数字角标列表、带图文列表
本文主要介绍list(列表)的几种展现形式:普通列表.带箭头列表.带数字角标列表.带图文列表 效果图如下: 1.普通列表:只需要在ul节点上添加.mui-table-view类.在li节点上添加.mu ...
- HTML页面仿iphone数字角标
做仿iphone样式的数字角标,用简单的css来实现 <html> <head> <title>角标数字</title> <style type= ...
最新文章
- px像素如何转为dip设备独立像素设备独立像
- FPGA 时序约束系列之周期约束
- html onfoucs状态事件,HTML onfocusin事件用法及代码示例
- SAP ABAP MARD和MARDH计算逻辑
- java sentence_Java Sentence類代碼示例
- 最近公共祖先 python_求二叉搜索树的最近公共祖先
- java定义数组_java中数组的三种定义方式_java中数组的定义及使用方法(推荐)...
- 史海峰:万字长文剖析技术人如何成长
- 精通Android自定义View(四)自定义属性使用详解
- Tensorflow学习笔记1----基础分类模型
- Python txt转换为excel
- Mysql数据表和表数据复制
- 国内 Mono 相关文章汇总
- PTA L1-020 帅到没朋友 (20 分)(C++)
- html a字体字号,A标签字体大小css布局实例教程
- 易掌员工电脑监控软件怎么样?有哪些功能?
- AJAX入门,什么是AJAX?为什么要用AJAX?如何使用AJAX?
- 【ybt高效进阶5-6-3】耗费体力(单调队列优化DP)
- AI智能营业厅视频监控解决方案
- 使用Python通过拉马努金公式快速求π