2016-04-04 11 views
3

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

Antwort

0

genau das gleiche Problem nach dem Upgrade auf Android 6 (Marshmallow) konfrontiert. Cordova Datei-Plugin (v 4.1.1) hat Berechtigungsproblem mit Android Marshmallow. Dieses Problem lässt nicht zu, dass Ordner im android-Dateisystem erstellt werden, was zu einem Pfadfehler führt.

Dieses Problem wurde behoben. Sie müssen möglicherweise die neueste FileUtils.java aus Android-Quellcode in Cordova-Datei-Plugin Github ziehen, um dies zu tun. Sobald Sie das Plugin aktualisiert haben, fordert die App beim ersten Zugriff auf das Dateisystem die Zugriffsberechtigung des Benutzers an. Nachfolgende Anfragen funktionieren von da an einwandfrei. Überprüfen Sie CB-10798 in Apache Problem Tracker für Informationen zu diesem Thema. Hoffe es hilft

+0

Danke dafür - wissen Sie, wann die nächste Version von 'cordova-plugin-file' wahrscheinlich veröffentlicht wird? – finchie

+0

@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

+0

v4.2.0 von 'cordova-plugin-file' wurde veröffentlicht - das Upgrade auf diese Version hat das Problem gelöst! Danke noch einmal! – finchie