2

Ich arbeite an der Entwicklung einer Android-App mit Cordova, ich wollte jeden Tag einen Ordner erstellen und speichern Sie eine TXT-Datei darin. alles, was ich versucht, ist für den internen Speicher jedes Android arbeiten, aber nicht für die externe SD-Karte, einen Blick und helfen Sie mir,Externer Speicherpfad (SD-Karte) für Android 5.1.1 und höher mit Cordova

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/'; 
} 

Above Zustand wird bis 4.4.4 Version arbeiten, nach 5.0 der PATH ist nicht korrekt.

habe ich versucht, alle diese unter Pfade für /mnt und /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 

ich überall gelesen, dass sdcard0 Interne und sdcard1 ist ein externer, aber es funktioniert nicht scheint mehr zu arbeiten. Kann mir jemand mit dem Pfad helfen?

Auch habe ich versucht

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

alle oben arbeitet für Interne Lagerung nur.

Alle Rechte für SPEICHER/LESEN/SCHREIBEN an externen Speicher sind gegeben.

Antwort

1

Ab Android 5.0 ist der Speicherort der externen (entfernbaren) SD nicht mehr ein fester Pfad. Stattdessen wird die Seriennummer der SD-Karte im Pfad verwendet. Zum Beispiel ist auf meinem Samsung Galaxy S4, auf dem Android 7.1.1 ausgeführt wird, der physische externe Wechselpfad für die SD-Karte /storage/4975-1401/.

Darüber hinaus ist das Stammverzeichnis der externen SD-Karte (z. B. /storage/4975-1401/) jetzt nur für Android-Apps schreibgeschützt. Das bedeutet, wenn Ihre App auf die SD-Karte schreiben muss, muss dies im Anwendungs-Sandbox-Verzeichnis (z. B. /storage/4975-1401/Android/data/your.app.package.id/files) geschehen.

cordova-plugin-file ermöglicht nicht den Zugriff auf die externe (entfernbare) SD-Karte: zum Beispiel cordova.file.externalRootDirectory gibt file:///storage/emulated/0/ zurück.

jedoch Sie die getExternalSdCardDetails() von cordova-diagnostic-plugin verwenden können, um die Dateipfade auf die externe (abnehmbar) SD-Karte, zum Beispiel abzurufen:

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 
}); 

Für Android 6.0 und höher, wird zur Laufzeit eine Genehmigung erforderlich um auf die externe SD-Karte zuzugreifen. Sie können requestRuntimePermission() in cordova-diagnostic-plugin verwenden, um diese Berechtigung anzufordern.

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); 
} 
  • Lauf diesen Code auf Android 5 und unter alwys in „Erlaubnis erteilt“ führt, ohne die Erlaubnis des Benutzers anfordert.
  • Sie müssen auch <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> in die AndroidManifest.xml einfügen - siehe .
Verwandte Themen