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

相关推荐
方白羽5 天前
Android 双开环境底层剖析与风控检测落地
android·安全·app
Bigger7 天前
开源了一个"先预览、能反悔"的文件整理工具,聊聊背后的工程细节
rust·开源·app
tech_zjf12 天前
下班后,我做了一个把照片贴进日历的 iPhone 应用:Daypatch
react native·app·产品
Momo__15 天前
155个App把豆包关在门外,豆包反手掏出第二把钥匙
app·agent·ai编程
河北清兮网络科技19 天前
广告联盟 APP 介绍:搭建属于自己的流量变现平台
小程序·app·产品经理·短剧app·广告联盟
duanze19 天前
从零开始Android商业项目Vibe coding完全指南(十一)
app·vibecoding
健了个平_2420 天前
【iOS】关于传统竖屏 UIKit 项目如何简单适配 iPhone Duo 的第一版
ios·app·swift
Autumn_ing20 天前
AI生成应用能做到哪一步?在线问诊APP从挂号到支付的完整案例
小程序·app·健康医疗·ai应用·问诊app·ai生成应用·墨刀ai
Mr_Mao20 天前
8 月我曾说过要让 DSH 像 Codex 一样好用,现在怎么样了?
app·deepseek