API 26模拟器上Android WidgetPreview报错问题咨询
这里有几个结合Android版本变更的可能性,你可以逐一排查:
运行时权限未适配:Android从API 23开始引入运行时权限机制,API 26对存储权限的管控进一步严格。WidgetPreview保存预览需要写入外部存储,在API 21时代系统会默认授予该权限,但API 26及以上要么需要应用主动申请权限,要么得用户手动开启。你可以进入模拟器的应用设置,检查WidgetPreview的存储权限是否已启用。
存储访问规则变更:API 26开始,Android对应用访问公共存储目录的限制更苛刻。如果WidgetPreview还是沿用API 21的逻辑直接写入公共目录(比如DCIM、Pictures),在API 26里这种操作会被拦截——现在需要通过MediaStore或者存储访问框架(SAF)来操作公共存储,旧版本没有这些限制,所以能正常保存。
模拟器镜像存在异常:部分API 26的模拟器官方镜像可能存在组件缺失或bug,比如媒体存储服务未正常启动,或者文件系统权限配置有问题。你可以尝试重新下载官方的API 26系统镜像,或者新建一个模拟器实例测试。
WidgetPreview自身兼容性问题:这个应用可能没针对API 26及以上版本做适配,比如使用了已废弃的存储API,或者没有处理新的权限模型。毕竟它在API 21能正常运行,说明旧版本逻辑没问题,但没跟上系统的新规则。
预览文件的格式/尺寸限制:API 26可能对保存的图片格式、尺寸有更严格的校验。如果WidgetPreview生成的预览图格式不被API 26支持,或者尺寸超出系统允许范围,就会触发保存失败。你可以尝试调整预览的尺寸,或者切换图片格式(比如从PNG换成JPG)试试。
内容的提问来源于stack exchange,提问作者Florian Walther

