You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Android TypeScript Nativescript中恢复下载目录读写权限(compileSdk33)

Android 10设备上NativeScript 8.5.9存储权限问题解决指南

核心问题分析

Android 10(API 29)引入了Scoped Storage机制,默认限制应用对外部存储的直接访问,你的targetSdkVersion=29会触发该机制。旧版权限插件nativescript-permissions已不兼容NS 8.5.9;@nativescript-community/perms的权限请求逻辑需适配Scoped Storage规则,而系统设置页无存储权限选项是Android 10的正常表现——Scoped Storage下不再显示传统存储权限开关。

分步解决方案

1. 启用旧版存储兼容模式

在AndroidManifest.xml的<application>标签中添加以下属性,暂时禁用Scoped Storage,恢复传统文件访问方式(仅对Android 10有效):

android:requestLegacyExternalStorage="true"

2. 修正权限请求逻辑

  • 弃用nativescript-permissions插件,该插件已停止维护,无法兼容NS 8.x版本。
  • 使用@nativescript-community/perms时,Android 10启用兼容模式后无需动态请求READ_EXTERNAL_STORAGE或WRITE_EXTERNAL_STORAGE(权限会自动授予)。若需确认权限,可保留请求代码并捕获异常:
import { Permissions } from '@nativescript-community/perms';

Permissions.requestPermissions([
    android.Manifest.permission.READ_EXTERNAL_STORAGE,
    android.Manifest.permission.WRITE_EXTERNAL_STORAGE
]).then(result => {
    console.log('权限请求结果:', result);
}).catch(err => {
    console.error('权限请求失败:', err);
});

3. 调整文件读写路径

不要使用硬编码绝对路径,改用NativeScript官方API获取下载目录:

import { knownFolders, File } from '@nativescript/core';

// 获取系统下载目录
const downloadsFolder = knownFolders.downloads();
// 创建或获取目标文件
const targetFile = downloadsFolder.getFile('test.txt');

// 写入文件
targetFile.writeTextSync('测试内容');
// 读取文件
const content = targetFile.readTextSync();
console.log('文件内容:', content);

4. 确认Manifest权限声明

确保AndroidManifest.xml中保留以下权限声明(即使Android 10不显示开关,声明仍需存在):

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

5. 验证Gradle配置

保持现有Gradle配置不变:

compileSdkVersion 33
minSdkVersion 29
targetSdkVersion 29

额外说明

  • MANAGE_EXTERNAL_STORAGE权限仅针对Android 11+,Android 10无需申请,也无法通过常规方式授予。
  • 若后续升级targetSdkVersion=30+,需完全适配Scoped Storage,改用MediaStore API访问公共目录或使用应用专属存储。

内容的提问来源于stack exchange,提问作者BenoitB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 09:34:53