适用于Android 5.1.1和更高版本的Cordova的外部存储路径(SD卡)
我正在开发与cordova的android应用程序,我想每天创建一个文件夹并在其中存储一个txt文件。一切我想工作的每一个Android的而不是外部SD卡的内存,看看,帮我出,适用于Android 5.1.1和更高版本的Cordova的外部存储路径(SD卡)
if(sDeviceVersion=='4.0' || sDeviceVersion=='4.0.4'){ var sPath = 'file:///storage/extSdCard/'; }else if(sDeviceVersion=='4.1' || sDeviceVersion=='4.1.2' ||sDeviceVersion=='4.3.1'){ var sPath = 'file:///storage/extSdCard/'; }else if(sDeviceVersion=='4.4' || sDeviceVersion=='4.4.4'){ var sPath = 'file:///storage/extSdCard/'; }else if(sDeviceVersion=='5.0' || sDeviceVersion=='5.1.1'){ var sPath = 'file:///mnt/sdcard/'; // }else if(sDeviceVersion=='6.0' || sDeviceVersion=='6.0.1'){ var sPath = 'file:///storage/sdcard1/'; }else if(sDeviceVersion=='7.0' || sDeviceVersion=='7.1.2'){ var sPath = 'file:///storage/sdcard1/'; }
以上情况工作到4.4.4版本,后5.0 PATH不正确。
我已经尝试了所有这些低于到/ mnt和/存储
// sdcard0 works on all the androind for Internal Memory
// 'file:///storage/sdcard1/'; suppose to work for external in higher version but
// 'file:///mnt/sdcard/'; it works but in Internal memory ERROR
// externalSdCard -----> Not found with mnt and storage
// SECONDARY_STORAGE
// 'file:///storage/UsbDriveB/' -----------> didn't worked
// external_sd is not worked with storage and mnt
我读到处是sdcard0是内部和sdcard1路径是外部的,但它不似乎正在工作了。任何人都可以帮助我的路径。
即使我已经试过
alert(cordova.file.externalRootDirectory); // file:///storage/sdcard0/ Internal memory alert(cordova.file.externalApplicationStorageDirectory); // path to file:///android/data... alert(cordova.file.dataDirectory); // file:///data/androind/data/... alert(cordova.file.externalDataDirectory); // file://storage/sdcard0/android/data/...
上述所有正在为内部唯一的存储。
给出了存储/读取/写入到外部存储的所有权限。
从Android 5.0开始,外部(可移动)SD的位置不再是固定路径。而是在路径中使用SD卡的序列号。 例如,在我运行Android 7.1.1的Samsung Galaxy S4上,物理外部可移动SD卡路径为/storage/4975-1401/
。
此外,外部SD卡的根目录(例如/storage/4975-1401/
)现在对Android应用程序是只读的。这意味着如果您的应用程序需要写入SD卡,则必须在应用程序沙箱目录中执行此操作(例如,/storage/4975-1401/Android/data/your.app.package.id/files
)。
cordova-plugin-file
不允许您访问外部(可移动)SD卡:例如cordova.file.externalRootDirectory
返回file:///storage/emulated/0/
。
但是,你可以使用cordova-diagnostic-plugin的来检索文件路径到外部(可拆卸)SD卡,例如:
function getExternalSdLocation(done){
cordova.plugins.diagnostic.getExternalSdCardDetails(function(details){
details.forEach(function(detail){
if(detail.type == "application"){
cordova.file.externalSdCardApplicationDirectory = detail.filePath;
}else if(detail.type == "root"){
cordova.file.externalSdCardRootDirectory = detail.filePath;
}
});
done();
}, function(error){
console.error(error);
done();
});
}
getExternalSdLocation(function(){
// use cordova.file.externalSdCardApplicationDirectory to write to SD card
});
对于在Android 6.0及以上,运行时间许可是必需的,以便访问外部SD卡。 您可以使用cordova-diagnostic-plugin中的requestRuntimePermission()来请求此权限。
function requestExternalSdPermission(done){
cordova.plugins.diagnostic.requestRuntimePermission(function(status){
switch(status){
case cordova.plugins.diagnostic.permissionStatus.GRANTED:
console.log("Permission granted");
getExternalSdLocation(done);
break;
case cordova.plugins.diagnostic.permissionStatus.DENIED:
console.log("Permission denied");
askAgain(done);
break;
case cordova.plugins.diagnostic.permissionStatus.DENIED_ALWAYS:
console.log("Permission permanently denied");
reportError(done);
break;
}
}, function(error){
console.error("The following error occurred: "+error);
reportError(done);
}, cordova.plugins.diagnostic.permission.WRITE_EXTERNAL_STORAGE);
}
- 运行在Android上5此代码,下面将alwys导致没有来自用户的请求允许“授予的权限”。
- 您还需要在
AndroidManifest.xml
中包含<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
- 请参阅Android permissions。