2

我正在开发与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/... 

上述所有正在为内部唯一的存储。

给出了存储/读取/写入到外部存储的所有权限。

回答

1

从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
相关问题