Ich aktualisiere eine Cordova 3.4-Anwendung gleichzeitig mit Cordova 6.0, während ich die Bereitstellungsplattform (Nexus-Tablets) von Android 4.4 auf Android 6 aktualisiere. Als Teil habe ich das Dateisystem-Plugin cordova-plugin-file
von v0.2.5 auf v4 aktualisiert .1.1Wie kann ich sicherstellen, dass meine Android 6 Cordova App den Benutzer dazu auffordert, vor dem Zugriff auf das Dateisystem eine Erlaubnis zu erteilen?
Die Anwendung erstellt beim ersten Start eine Verzeichnisstruktur von 10 Ordnern auf dem freigegebenen Dateisystem (file:///storage/emulated/0/
). Ich habe die folgende Präferenz hinzugefügt config.xml denselben Ort, um sicherzustellen, ist in der neuen Version der App verwendet:
<uses-sdk android:minSdkVersion="14" android:targetSdkVersion="23" />
<preference name="AndroidPersistentFileLocation" value="Compatibility" />
Ich bin mir bewusst, dass es ein neues Berechtigungsmodell 6 in Android ist, wo der Benutzer muss jede Berechtigung, die die Anwendung anfordert, separat zulassen. die App-Anfragen Berechtigungen vom Benutzer zur Laufzeit
Wenn das Gerät mit Android 6.0 (API-Ebene 23) oder höher und die targetSdkVersion des App ist 23 oder höher. Android Developer documentation
Wenn auf Tablets installiert, die eine frühere Version installiert gehabt haben (und da uninstalled) und die die Verzeichnisstruktur erstellt hatten, die neue Version meiner App beim ersten Lauf wie erwartet ausführt, woraufhin der Benutzer Erlaubnis erlauben, auf das Dateisystem zuzugreifen.
Wenn die App jedoch auf einem Tablet installiert wird, auf dem die App zuvor noch nicht installiert war (oder wenn ich die von einer früheren Version erstellte Verzeichnisstruktur lösche), wird die FileError.PATH_EXISTS_ERR
Fehlermeldung ausgegeben. Der Benutzer wird nicht aufgefordert, die Berechtigung zum Zugriff auf das Dateisystem wie erwartet zu erteilen.
Ich habe überprüft, dass, wenn die Anwendung erstellt wird, wird die erzeugte AndroidManifest.xml die notwendigen Berechtigungen enthalten Attribut:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Meine aktuelle Problemumgehung ist die App zu beenden, navigieren Sie zu Einstellungen> Apps> MeineAnw > Berechtigungen und aktivieren Sie die Berechtigung "Speicher" manuell, bevor Sie die App erneut ausführen. Aber ich möchte wirklich nicht, dass meine Benutzer das tun müssen!
Wie kann ich sicherstellen, dass die App den Benutzer dazu auffordert, die erforderliche Berechtigung zu erteilen, bevor er tatsächlich versucht, auf das Dateisystem zuzugreifen?
Hier sind einige Beispiele meiner Code:
window.requestFileSystem(window.LocalFileSystem.PERSISTENT, 4000 * 1024 * 1024, gotFileSystem, errorHandler);
function gotFileSystem(fileSystem) {
// store reference to file system
fs = fileSystem;
}
function createDir(directoryName) {
var directoryCreated = when.defer();
fs.root.getDirectory(directoryName, {
create: true
}, function (dirEntry) {
directoryCreated.resolve();
}, function(e) {
directoryCreated.reject(e);
}
);
return directoryCreated.promise;
}
Danke dafür - wissen Sie, wann die nächste Version von 'cordova-plugin-file' wahrscheinlich veröffentlicht wird? – finchie
@finchie, tut mir leid, ich habe keine Ahnung davon. Aber Sie können die FileUtils.java-Änderungen, die zu diesem Problem gehören, immer noch von github und der Problemumgehung für jetzt abziehen. – Gandhi
v4.2.0 von 'cordova-plugin-file' wurde veröffentlicht - das Upgrade auf diese Version hat das Problem gelöst! Danke noch einmal! – finchie