我需要将文件写入sd卡的根目录。我使用cordova-diagnostic-plugin中的getExternalSdCardDetails()函数。并得到如下内容:
[{
"path": "/storage/4975-1401/Android/data/cordova.plugins.diagnostic.example/files",
"filePath": "file:///storage/4975-1401/Android/data/cordova.plugins.diagnostic.example/files",
"canWrite": true,
"freeSpace": 16254009344,
"type": "application"
}, {
"path": "/storage/4975-1401",
"filePath": "file:///storage/4975-1401",
"canWrite": false,
"freeSpace": 16254009344,
"type": "root"
}]
所以,我不能写file:///storage/4975-1401
,因为"canWrite": false
我已经添加了
<preference name="AndroidPersistentFileLocation" value="Compatibility" />
<preference name="AndroidExtraFilesystems" value="files,files-external,documents,sdcard,cache,cache-external,assets,root" />
config.xml
和
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
到AndroidManifest.xml
,但没有结果,当我尝试写文件到根目录,我得到错误CODE 5 ENCODING_ERR
写入/storage/4975-1401/Android/data/cordova.plugins.diagnostic.example/files
正在工作。
1条答案
按热度按时间k4emjkb11#
自Android 4.4 Kitkat起,非系统应用对其应用沙盒区域(
/Android/data/[package-id]/
)以外的辅助存储卷(即可移动SD卡)拥有只读权限。See here了解更详细的说明。因此,
getExternalSdCardDetails()
函数正确地通知您可以写入应用程序沙箱目录/storage/4975-1401/Android/data/cordova.plugins.diagnostic.example/files
,但不能写入根目录/storage/4975-1401/
。在Android 4.4及更高版本上没有办法解决这个问题,除非设备是root的。