使用Expo Document Picker选取目录时遇Native方法调用异常问题
问题解决:Expo DocumentPicker 选择目录时出现"No Activity found to handle Intent"错误
错误原因
你用DocumentPicker.getDocumentAsync并指定type: "directory"是错误的——这个API仅用于选择文件,不支持目录选择,所以系统找不到能处理打开目录Intent的Activity,抛出了该错误。
解决方案
既然你已经通过FileSystem.StorageAccessFramework.requestDirectoryPermissionsAsync()请求了SAF(存储访问框架)权限,直接用SAF的API来选择目录即可,无需再调用DocumentPicker。
修改后的代码如下:
import * as FileSystem from 'expo-file-system'; const pickDirectory = async () => { console.log("hi!!!!!"); try { const permission = await FileSystem.StorageAccessFramework.requestDirectoryPermissionsAsync(); if (permission.granted) { // 使用SAF的API获取目录,而非DocumentPicker const dirUri = await FileSystem.StorageAccessFramework.getDirectoryAsync(); console.log("选中的目录URI:", dirUri); // 后续可通过SAF API操作目录,比如读取文件列表 // const files = await FileSystem.StorageAccessFramework.readDirectoryAsync(dirUri); // console.log("目录内文件:", files); } } catch (error) { console.log(error); } };
补充说明
- Expo的
FileSystem.StorageAccessFramework模块专门用于SAF相关的目录操作,包括权限请求、目录选择、文件读写等,完全满足你选择目录的需求。 - 确保你的Expo SDK版本在48及以上(SAF相关API在该版本后稳定支持)。
内容的提问来源于stack exchange,提问作者mudit bansal
相关产品推荐
相关产品推荐

