簡體   English   中英

適用於Android 5.1.1及更高版本的Cordova的外部存儲路徑(SD卡)

[英]External Storage Path (SD card) for Android 5.1.1 and later with Cordova

我正在開發一個帶有cordova的android APP,我想每天創建一個文件夾並在其中存儲一個txt文件。 我嘗試的一切都是為每個機器人的內部存儲器而不是外部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/ storage嘗試了以下所有這些路徑

// 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/... 

以上所有僅適用於內部存儲。

給出了對外部存儲器的STORAGE / READ / WRITE的所有許可。

從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-plugingetExternalSdCardDetails()來檢索外部(可移動)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及更低版本上運行此代碼將導致“授予權限”而無需用戶的許可。
  • 您還需要在AndroidManifest.xml包含<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> - 請參閱Android權限

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM