安卓AppWidget桌面小组件在国产移动设备的一些适配问题

前言

安卓AppWidget推出比较早,但似乎用的人并不多,也没有掀起什么使用潮流,不过近期公司要求做,所以去尝试接入使用,不过遇到一些坑的地方,所以想归纳一下问题。 关于如何使用小组件appWidget等相关内容就不谈了,按照官网的指导做就行安卓AppWidget

渠道的差异性

注意:请明确,是开发安卓小组件还是要接入各大厂商定制渠道的小组件,它们是两种不同的组件。 厂商小组件在安卓小组件基础上增加了厂商定制的特色功能,有"添加到负一屏"、"组件库能够被搜索到"等, 例如,小米澎湃 OS 的小部件支持 "无字模式",隐藏桌面上的应用与小部件名称,使桌面更加简约,曝光刷新、实时动态、负一屏和桌面相互拖拽等能力。vivo 的 OriginOS 采用磁贴式设计。华为的鸿蒙系统万能卡片将应用的重要信息或操作前置。OPPO 的 ColorOS 系统小部件在与系统的交互上,会融入闪达窗口等特色功能。

一般来说,我们希望可以主动添加组件,无需用户手动长按桌面进入组件库找到并添加,官方提供了方法:

boolean AppWidgetManager.requestPinAppWidget()

这个方法的作用是可以主动请求添加小组件,返回值为bool类型,支持添加则为true。 以下渠道表现归纳如下:

综合表现:调用方法会弹出小组件添加提示确认框,点击确认后,会将小组件添加到桌面上,当前桌面页面空间不足以放置,会自动在桌面开启新一页,将小组件放置到新一页。

华为/honor:

是否弹确认框:是 是否空间不足新增一页放置:否,空间不足系统提示"当前页面空间不足"

OPPO/三星:

是否弹确认框:是 是否空间不足新增一页放置:是

小米/红米:

是否弹确认框:否 是否空间不足新增一页放置:是 其他:方法请求时,如果应用未开启授予"桌面快捷方式"权限,将不会添加到桌面

vivo/iqoo:

是否弹确认框:否 是否空间不足新增一页放置:是 其他:若不接入vivo平台的原子组件SDK, 并将小组件上架到vivo组件平台,并通过vivo原子组件平台审核测试通过,则此方法将无任何效果,即你不能主动将小组件添加到桌面。 相关链接:vivo原子组件

其他表现:

  1. 小组件添加确认弹框形态各异,取决于渠道,以及安卓SDK版本
  2. AppWidgetManager.requestPinAppWidget() 方法的返回值是代表是否支持主动将小组件添加到桌面,所以不管小组件添加到桌面成功与否,方法返回值都是true【除极少安卓SDK低版本不支持】
  3. AppWidgetManager.requestPinAppWidget() 方法第三个参数,支持传入一个PendingIntent,当小组件添加到桌面成功后,将触发回调,若添加失败则不会触发回调。这里就存在一个问题,调用此方法后不会触发回调,小组件是"还未添加到桌面"还是"添加桌面失败",我们需要区分两种状态情景,以便异常处理。
  4. 华为不支持第3点,不管添加成功与否, 第三个参数PendingIntent都不会被隐式触发启动。
  5. 不同机型UI上的适配。在A设备小组件Cell占格可能为4 x 2, 到B设备就可能变为 5 x 3。此外小组件支持的UI控件与组件较少,在不同设备上要做好尺寸调整的UI适配。
  6. 关于小组件点击事件处理:app未启动,点击小组件的控件,触发PendingIntent,启动app,深度链接进入到指定页面,然后将app切到后台,回到桌面再次点击小组件同一控件,第二次触发PendingIntent启动,若Intent不设置Action主动清理Activity堆栈,app将自动由后台切回前台,此时如何取到Intent携带数据?在Activity的onNewIntent方法?没准你实践之后会有新思路。
  7. 关于将小组件添加到负一屏,目前没有统一的SDK,需要接入各大厂商渠道定制SDK或协议,由于繁杂,具体实操我暂时没有去处理,目前只将小组件添加到桌面。
  8. 请关注appWidget在系统字体调整后能否适应UI,不会出现遮挡、控件被截取等问题。
  9. appWidget在各大厂商叫法不同,"卡片"、"小组件"、"小部件"、"应用挂件"、"磁贴"等。
  10. 关于检测是否已经将appWidget添加到桌面成功,可通过AppWidgetManager获取组件ID个数getAppWidgetIds()方法判断,即添加前检测一次小组件已添加次数,点击添加后,延时再检测一次。

综上所述: 安卓小组件存在很多适配问题,如果需要实现较为优秀的交互和体验,需要接入各个厂商渠道定制的SDK,或遵循它们所制定的桌面组件管理系统的配置,光凭Android 官方提供的方法难以适配,效果不佳。如你有需求需要做此功能,建议做好前期调研,了解哪些可做,哪些难做,哪些做不了。

相关推荐
i仙银3 天前
鸿蒙沙箱浏览器 - SandboxFinder
app·harmonyos
洛卡卡了5 天前
首页扛不住了?先别重启,我来点骚的
面试·架构·app
iOS阿玮6 天前
苹果审核对于4.3a的态度,只是包容性强, 不代表没脾气!
uni-app·app·apple
神策技术社区10 天前
iOS 全埋点点击事件采集白皮书
大数据·ios·app
J船长10 天前
gRPC 与传统 REST API 的区别与实践详解
app
摆烂式编程11 天前
APP端定位实现(uniapp Vue3)(腾讯地图)
uni-app·app·vue3·定位·腾讯
IoT砖家涂拉拉12 天前
萌宠语聊新模板!借助On-App AI降噪与音频处理技术,远程安抚宠物更轻松、更安心!
人工智能·ai·app·音视频·智能家居·智能硬件·宠物
vocal14 天前
【我的安卓第一课】Android 运行时权限
android·app
yjm18 天前
从一例 Lottie OOM 线上事故读源码
android·app