A
Air官方
文件选择是桌面应用的高频动作,鸿蒙把它交给系统 Picker(选择器)体系:用户经系统界面选文件或目录,应用拿到的不是路径而是授权 URI。这篇讲文件桥的实现。
▍为什么必须用系统选择器
安全模型决定的:应用不能随意扫全盘,文件访问要有用户授权动作。系统 Picker 就是那个授权动作的载体——用户在系统界面选了文件,等于把该文件的访问权授给应用。桌面应用里的打开、保存、另存为对话框,全部映射到 Picker 语义。
▍打开与保存的双桥
打开桥:应用请求选择文件(可限定类型),用户选择后应用获得 URI,经文件描述符接口读内容。要点是 URI 的消费要即时或做好持久化授权(会话结束 URI 可能失效)。保存桥:系统保存选择器让用户选位置与文件名,应用写入内容。桌面习惯的默认文件名、格式下拉要在请求参数里带全。目录选择是第三种:让用户授权整个目录(下一层的沙箱篇详述)。
▍URI 到应用侧的翻译
框架层期望的是路径。桥的工作:把 URI 解析成可读写的文件通道,框架看到的还是熟悉的路径语义。注意缓存策略:URI 授权有生命周期,长期使用的文件(工程文件、库目录)要申请持久化权限,临时文件即用即弃。真实工程的坑:保存功能被浏览器式的下载逻辑抢走(Web 壳场景),必须显式接管保存动作走系统通道。
▍体验细节
最近使用、收藏位置这些 Picker 自带;应用侧要记住上次目录(在授权范围内);多选场景给批量接口;大文件选择后的加载要异步(主线程别卡)。
▍验收
打开各类型文件、保存覆盖与新建、取消路径(用户取消不报错)、持久化授权过期后的重新引导、跨启动的授权保持。以及在分屏与折叠形态下 Picker 弹出的形态正常。
▍建议
文件桥独立成模块,URI 与路径的映射关系带日志。凡涉文件的 bug,先确认授权链路再看数据链路。
有疑问欢迎在本板块直接发帖,我们会逐条回复。
▍为什么必须用系统选择器
安全模型决定的:应用不能随意扫全盘,文件访问要有用户授权动作。系统 Picker 就是那个授权动作的载体——用户在系统界面选了文件,等于把该文件的访问权授给应用。桌面应用里的打开、保存、另存为对话框,全部映射到 Picker 语义。
▍打开与保存的双桥
打开桥:应用请求选择文件(可限定类型),用户选择后应用获得 URI,经文件描述符接口读内容。要点是 URI 的消费要即时或做好持久化授权(会话结束 URI 可能失效)。保存桥:系统保存选择器让用户选位置与文件名,应用写入内容。桌面习惯的默认文件名、格式下拉要在请求参数里带全。目录选择是第三种:让用户授权整个目录(下一层的沙箱篇详述)。
▍URI 到应用侧的翻译
框架层期望的是路径。桥的工作:把 URI 解析成可读写的文件通道,框架看到的还是熟悉的路径语义。注意缓存策略:URI 授权有生命周期,长期使用的文件(工程文件、库目录)要申请持久化权限,临时文件即用即弃。真实工程的坑:保存功能被浏览器式的下载逻辑抢走(Web 壳场景),必须显式接管保存动作走系统通道。
▍体验细节
最近使用、收藏位置这些 Picker 自带;应用侧要记住上次目录(在授权范围内);多选场景给批量接口;大文件选择后的加载要异步(主线程别卡)。
▍验收
打开各类型文件、保存覆盖与新建、取消路径(用户取消不报错)、持久化授权过期后的重新引导、跨启动的授权保持。以及在分屏与折叠形态下 Picker 弹出的形态正常。
▍建议
文件桥独立成模块,URI 与路径的映射关系带日志。凡涉文件的 bug,先确认授权链路再看数据链路。
有疑问欢迎在本板块直接发帖,我们会逐条回复。
楼主
7 天前