Löst SAF (Storage Access Framework) das SD-Karten-WRITE-Problem in Android 4.4 (KitKat)?

9

In Android 4.4 können Apps aus dem Play Store nur in ihr App-spezifisches Verzeichnis schreiben (zB: /storage/extSdCar/Android/data/com.example.myapp/) und Apps dürfen nur in dieses Verzeichnis schreiben Micro SD Karte. Also erkunde ich die neue SAF-API, um zu überprüfen, ob ich SAF verwenden kann, um auf eine andere micro-SD-Karte als das anwendungsspezifische Verzeichnis zu schreiben.

Ich habe SAF implementiert, indem ich einen Beispielanbieter und eine Client-App erstellt habe. In meinem Provider habe ich versucht, den gesamten Inhalt der SD-Karte zu zeigen, indem ich den folgenden Code in queryRoots implementiere:

%Vor%

Ich habe die folgende Absicht in meinem Client erstellt und bin in der Lage, den gesamten Inhalt der SD-Karte über meinen Provider von der Systembenutzeroberfläche von SAF zu durchsuchen.

%Vor%

Wenn ich auf die Speichern-Schaltfläche klicke, bekomme ich einen Toast-Fehler "Fehler beim Speichern des Dokuments" .Aber wenn ich zum App-spezifischen Verzeichnis (/storage/extSdCar/Android/data/com.example.myprovider/) von gehe meinem Provider in System UI kann ich das Dokument speichern. Außerdem gibt es KEINE Absicht wie Intent.CATEGORY_WRITABLE, so dass ich nur Dokumente erhalten kann, die bearbeitet werden können. Bitte helfen Sie mir zu den folgenden Punkten:

1. Es scheint, dass, selbst wenn wir SAF verwenden, die WRITE-Beschränkung für die Micro-SD-Karte gleich bleibt. Ist das korrekt?

2.Gibt es eine Möglichkeit, dass ich bereits vorhandene Dateien außerhalb meines anwendungsspezifischen Verzeichnisses auf einer Micro-SD-Karte erstellen oder löschen oder ändern kann?

3.Wer entscheidet das Flag FLAG_SUPPORTS_WRITE für normale Benutzerdateien wie Fotos, Videos, Musik, Dokumente usw.?

    
Sivaraj Velusamy 28.03.2014, 07:16
quelle

1 Antwort

3

Wenn Sie DocumentsProvider implementieren, können Sie nur den Zugriff auf Dateien auf der Festplatte erweitern, auf die Sie bereits Zugriff haben. Wenn Sie DocumentsProvider hinzufügen, erhalten Sie keinen neuen Zugriff, daher müssen Sie wahrscheinlich keinen implementieren.

Sie können Schreibzugriff überall auf einer SD-Karte erhalten, indem Sie die von Ihnen erwähnten ACTION_OPEN_DOCUMENT oder ACTION_CREATE_DOCUMENT Intents verwenden. Es ist ein ExternalStorageProvider in das System eingebaut, das Zugriff auf alle SD-Karten hat, und es wird Ihnen den Schreibzugriff gerne delegieren, sobald der Benutzer diese Einstellungen bestätigt hat.

Benutzer müssen möglicherweise "Einstellungen & gt; Erweiterte Geräte anzeigen" aktivieren, um die von ExternalStorageProvider angebotenen SD-Karten anzuzeigen. Wenn Sie den Benutzer auf die Interaktion mit lokalem Speicher beschränken möchten, können Sie auch EXTRA_LOCAL_ONLY festlegen.

Wie unter (2) können Sie neue Dateien außerhalb Ihres paketspezifischen Verzeichnisses mit ACTION_CREATE_DOCUMENT erstellen und vorhandene Dateien mit beiden Intentionen auswählen. Benutzerdefinierte Dateien können mit DocumentsContract.deleteDocument() gelöscht werden.

Und für (3) erweitert MediaDocumentsProvider , das in die Plattform eingebaut ist, derzeit FLAG_SUPPORTS_WRITE nicht für Fotos, Videos und Musik.

Hoffe, das hilft. :)

    
Jeff Sharkey 02.04.2014, 16:20
quelle