uniapp开发app时,如何解决fail targetSdkVersion设置>=29后在Android10+系统设备不支持当前路径。请更改为应用运行路径!
时间: 2024-12-12 14:31:04 浏览: 4
在 UniApp 开发 App 时,如果遇到 Android 10 及以上版本不支持原生文件访问的问题,特别是当你设置了较高的 `targetSdkVersion`(如 29 或更高),可以尝试通过以下步骤将文件路径更改为应用自身的运行路径:
1. **理解权限需求**:从 API 级别 29 开始,为了保护用户隐私,Android 引入了 scoped storage(限定存储)机制,不允许应用程序直接读写外部存储目录。你需要获取特定的 Storage Access Framework ( SAF ) 权限来操作文件。
2. **请求权限**:在 AndroidManifest.xml 文件中添加相应的 `<uses-permission>` 标签,例如:
```xml
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
```
如果需要使用 scoped storage,还需要申请 `ACTION_OPEN_DOCUMENT_TREE` 和 `ACTION_READ_EXTERNAL_STORAGE` 权限,并使用动态权限管理框架(如 AndroidX 的 ActivityCompat.requestPermissions())。
3. **使用相对路径**:改变文件访问策略,不再直接使用绝对的外部路径,而是将文件保存到应用内部的私有目录(`getExternalFilesDir()` 或 `getCacheDir()`),然后提供一个统一的、安全的接口给上层逻辑处理读写。
4. **文件操作封装**:创建专门的工具类,用于封装文件的读取、写入和路径转换操作。这样可以使代码更清晰,也能避免直接暴露敏感路径。
5. **适配API 29+的路径转换**:使用 Java 或 Kotlin 中的 File APIs(如 `FileProvider` 或 `Environment.getStorageAccessFrameworkFile()`)来转换路径,以便在 scoped storage 下正常工作。
阅读全文