ich nach einer Möglichkeit, im folgende Szenario laufen Dateien zwischen Anwendungen zu teilen:Freigeben von Dateien zwischen Apps auf Android. Gibt es eine gute Alternative zu ContentProvider?
- In unserer App gibt es eine Liste von Dateien. Der Benutzer klickt auf die Schaltfläche Teilen, und wir zeigen ihm den Auswahldialog, der eine Liste von Apps anzeigt, die die Datei aufnehmen können. Zum Beispiel kann der Benutzer wählen Google Mail, um den Brief zu erstellen und an diesen Brief ausgewählte Datei anhängen oder Benutzer kann die Datei über Bluetooth übertragen.
- Die Datei kann in einem privaten Verzeichnis der App sein.
- Die Datei kann sich an einer beliebigen Stelle im Dateisystem befinden, mit Ausnahme der Verzeichnisse, die Root-Zugriff erfordern.
- App, die die Datei empfängt, darf keine
READ_EXTERNAL_STORAGE
Berechtigung haben. - Es sollte von API-Ebene 14 und bis zu den neuesten Versionen arbeiten.
Wie ich verstehe, ist der einzige Weg, um alle Bedingungen zu erfüllen, ist die Umsetzung in meinem app individuellen ContentProvider
oder FileProvider
. Das ContentProvider
wird den Inhalts-URI für die Datei geben, und wir fügen diesen URI an die ACTION_SHARE
Intent mit der FLAG_GRANT_READ_URI_PERMISSION
.
Ich machte mir Sorgen, dass ich einige andere einfache und saubere Lösung verpasst habe. Ob es überhaupt eine andere zuverlässige Alternative zu ContentProvider gibt, und wenn sie existiert, als was ist sie?
Die Verwendung von 'FileProvider' für Ihr Szenario erfordert zwei Zeilen Java-Code, eine vierzeilige XML-Datei und weniger als ein Dutzend Zeilen im Manifest. Wie viel einfacher erwartest du zu bekommen? – CommonsWare
@CommonsWare danke für Ihre vorherige Antwort. Ich habe die FileProvider-Anforderungen nicht näher betrachtet, aber ich habe einige ContentProvider gesehen, die meines Erachtens sehr viel Code benötigen. Mir geht es aber gut, es zu benutzen, habe nur etwas Perfektionistische Neugierde über andere Wege. Entschuldigung, wenn ich mich ärgere. – Dima
Die Implementierung eines 'ContentProvider' ist erschwerend. 'FileProvider' ist bereits implementiert. Entweder du verwendest es direkt oder du unterklassierst es für kleinere Kompatibilitätskorrekturen (z. B. die, die ich verwende, hat eine Drei-Zeilen-Methode, und das ist es). Zugegebenermaßen deckt 'FileProvider' nicht unbedingt alles in Ihrem Szenario ab. Insbesondere haben Sie keine Möglichkeit, 'FileProvider' mit Wechselspeicher zu verwenden, da Sie die Pfade zur Kompilierzeit nicht kennen. – CommonsWare