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*
GOOGLE 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 为桌面图标添加数字角标相关推荐

  1. Andoid 桌面icon添加数字角标

    产品经理拿着iPhone对我说,"这加上角标",转身就走了. 在Android系统中,是不支持BadgeNumber的,也就是原生Android系统是没有类似于ios 桌面icon ...

  2. Android Launcher桌面图标显示数字

    之前一直以为是应用本身在对图标进行修改,看了源码之后发现其实主要的工作并不是应用自己完成的,主要的工作在是launcher里面完成的. 关于系统里面类似未读短信的具体处理流程如下: 原理 一个应用要实 ...

  3. Android 桌面图标添加未读消息角标APP角标最佳实践

    Android 桌面图标添加未读消息角标APP角标最佳实践 本项目的完整演示代码 https://github.com/benchegnzhou/AndroidDevelomentArtDemo 最近 ...

  4. 手机计算机数字显示在桌面上,手机桌面上的应用如何取消显示的数字角标

    手机桌面上的应用如何取消显示的数字角标很多小伙伴都还不知道,下面IEfans小编为大家整理了取消显示的数字角标的流程一览,怎么取消显示的数字角标,一起来看看吧! 方法/步骤分享: 1.首先,点击手机桌 ...

  5. 【Delphi】Android 桌面图标添加快捷菜单功能

    目录 一.为什么需要桌面图标长按快捷菜单 二.实现Android桌面图标快捷菜单 第一步:Delphi 创建一个 FMX 工程文件:ShortCut_Demo.dpr 第二步:编辑项目中的 Andro ...

  6. Mui的APPLOGO数字角标小米问题

    之前写了篇博客,生成jar包并添加进项目离线打包安卓APP,实现APP上LOGO的数字角标,但是最近有用户寄过来一台小米max3,因为APP启动后执行到显示数字角标的时候会崩. 通过Android S ...

  7. uni-app消息推送华为不显示数字角标???

    操作过程: 1. 将设备的角标显示方式改为数字角标 2. 在uni-app代码中设置角标: plus.runtime.setBadgeNumber(1) //添加角标 发现App的角标并没有显示数字. ...

  8. MUI-list(列表),普通列表、带箭头列表、带数字角标列表、带图文列表

    本文主要介绍list(列表)的几种展现形式:普通列表.带箭头列表.带数字角标列表.带图文列表 效果图如下: 1.普通列表:只需要在ul节点上添加.mui-table-view类.在li节点上添加.mu ...

  9. HTML页面仿iphone数字角标

    做仿iphone样式的数字角标,用简单的css来实现 <html> <head> <title>角标数字</title> <style type= ...

最新文章

  1. px像素如何转为dip设备独立像素设备独立像
  2. FPGA 时序约束系列之周期约束
  3. html onfoucs状态事件,HTML onfocusin事件用法及代码示例
  4. SAP ABAP MARD和MARDH计算逻辑
  5. java sentence_Java Sentence類代碼示例
  6. 最近公共祖先 python_求二叉搜索树的最近公共祖先
  7. java定义数组_java中数组的三种定义方式_java中数组的定义及使用方法(推荐)...
  8. 史海峰:万字长文剖析技术人如何成长
  9. 精通Android自定义View(四)自定义属性使用详解
  10. Tensorflow学习笔记1----基础分类模型
  11. Python txt转换为excel
  12. Mysql数据表和表数据复制
  13. 国内 Mono 相关文章汇总
  14. PTA L1-020 帅到没朋友 (20 分)(C++)
  15. html a字体字号,A标签字体大小css布局实例教程
  16. 易掌员工电脑监控软件怎么样?有哪些功能?
  17. AJAX入门,什么是AJAX?为什么要用AJAX?如何使用AJAX?
  18. 【ybt高效进阶5-6-3】耗费体力(单调队列优化DP)
  19. AI智能营业厅视频监控解决方案
  20. 使用Python通过拉马努金公式快速求π

热门文章

  1. Nginx静态资源部署
  2. 图形测试分析毫无头绪HarmonyOS图形栈测试技术帮你解决
  3. 阿里Node.js面试题集合
  4. NLP入门学习1——分词和词性标注
  5. Linux的super super super easy教程 | shell常用文本命令
  6. 第一次使用mui框架制作web app项目的一些心得
  7. 基于Node的Promise使用介绍
  8. js jq 删除列表元素
  9. wps兑换优惠券在哪里_你的支付宝积分用了吗,再不用就要过期了,现在还可以兑换红包...
  10. 入门 Python 要多久?