安卓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 官方提供的方法难以适配,效果不佳。如你有需求需要做此功能,建议做好前期调研,了解哪些可做,哪些难做,哪些做不了。

相关推荐
iOS阿玮18 小时前
苹果审核被拒4.1-Copycats过审技巧实操
uni-app·app·apple
宋智孝的小迷弟2 天前
Android 异步数据流:Kotlin Flow 为何成为新一代“利器”?LiveData 又有何局限?
android·面试·app
iOS阿玮2 天前
不想被苹果卡审最好错开这两个提审时间
uni-app·app·apple
夜路未染2 天前
Android组件之Activity知识点梳理
app
newki3 天前
【Flutter】FCM与Notifications集成流程
flutter·app
Chuck_Chan4 天前
Launcher3体系化之路
android·app
newki6 天前
【Flutter】Stripe支付集成流程
flutter·app
iOS阿玮6 天前
别让AI写的代码,成为Appstore上架的绊脚石
uni-app·app·apple
yxc_inspire15 天前
基于Qt的app开发第十天
开发语言·c++·qt·app