Android端NativeScript FilePicker无法显示本地文件问题咨询
问题场景
在Android NativeScript应用中使用@angelengineering/filepicker插件,已在Manifest中配置READ_EXTERNAL_STORAGE、WRITE_EXTERNAL_STORAGE权限,并添加android:requestLegacyExternalStorage="true"参数。模拟器中存在目标JSON文件,但调用pickedFiles = await filePicker(MediaType.NONE, false);后,文件选择器主界面及汉堡菜单中均无文件显示。
排查与解决方案
检查MediaType参数有效性
使用MediaType.NONE可能在部分Android版本中触发异常过滤逻辑。建议直接指定目标文件的MIME类型,或使用插件支持的"所有文件"枚举值:// 尝试指定JSON文件类型 pickedFiles = await filePicker("application/json", false); // 或允许所有文件 pickedFiles = await filePicker("*/*", false);确认文件存储位置
确保JSON文件存放在公共存储目录(如Download、Documents),而非应用私有目录。系统文件选择器无法访问应用私有目录下的文件。动态申请权限
Android 6.0+需动态申请存储权限,即使Manifest已配置,仍需在调用文件选择器前完成授权:import { requestPermissions, hasPermission } from "@nativescript/core"; // 调用filePicker前检查并申请权限 const hasReadPerm = await hasPermission("android.permission.READ_EXTERNAL_STORAGE"); if (!hasReadPerm) { const permResult = await requestPermissions(["android.permission.READ_EXTERNAL_STORAGE"]); if (!permResult["android.permission.READ_EXTERNAL_STORAGE"]) { // 处理用户拒绝权限的情况 return; } }验证legacy存储配置位置
确认android:requestLegacyExternalStorage="true"配置在AndroidManifest.xml的<application>标签下,而非单个<activity>标签内,配置错误将无法兼容Android 10+的存储机制。更新插件版本
旧版本插件可能存在Android 10+存储适配bug,尝试更新@angelengineering/filepicker至最新版本后重新测试。排查系统文件选择器限制
部分模拟器或定制ROM的文件选择器默认隐藏特定文件类型,可尝试通过搜索文件名的方式查找目标JSON文件,确认文件是否真的被选择器过滤。
内容的提问来源于stack exchange,提问作者Alex-1999

