2016-03-23 5 views
11

Es fällt mir schwer, den Unterschied zwischen ACTION_OPEN_DOCUMENT und ACTION_GET_CONTENT Intents zu verstehen, wenn sie zum Öffnen eines zu öffnenden Dokuments verwendet werden. Wenn ich Andriod vor KitKat unterstütze, welches ACTION_OPEN_DOCUMENT nicht unterstützt, sollte ich mich einfach mit ACTION_GET_CONTENT begnügen?Was ist der wirkliche Unterschied zwischen ACTION_GET_CONTENT und ACTION_OPEN_DOCUMENT?

Die documentation sagt dies:

ACTION_OPEN_DOCUMENT ist kein Ersatz für ACTION_GET_CONTENT sein soll. Das sollte Sie richtet sich nach den Bedürfnissen der Ihre App verwenden:

  • Verwenden ACTION_GET_CONTENT, wenn Sie Ihre App einfach lesen wollen/Import Daten. Bei diesem Ansatz importiert die App eine Kopie der Daten, z. B. eine Bilddatei.
  • Verwenden Sie ACTION_OPEN_DOCUMENT, wenn Ihre App langfristigen, dauerhaften Zugriff auf Dokumente im Besitz eines Dokuments Provider haben soll. Ein Beispiel wäre eine Bildbearbeitungs-App, mit der Benutzer Bilder bearbeiten können, die in einem Dokumentanbieter gespeichert sind.

Nicht ACTION_GET_CONTENT auch Dokument-Provider in KitKat verwenden? Was würde mich daran hindern, einen "langfristigen, dauerhaften Zugang" zu haben, und was genau bedeutet das?

Was ist im Grunde der Unterschied zwischen den folgenden zwei Schnipsel?

ACTION_GET_CONTENT

Intent intent = new Intent(Intent.ACTION_GET_CONTENT); 
intent.addCategory(Intent.CATEGORY_OPENABLE); 
intent.setType("*/*"); 

ACTION_OPEN_DOCUMENT

Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT); 
intent.setType("*/*"); 

Antwort

13

Nicht ACTION_GET_CONTENT auch Dokument-Provider in KitKat verwenden?

Nicht unbedingt. Das hängt von der Implementierung der App ab, die den Inhalt veröffentlicht. Beachten Sie auch, dass DocumentProvider eine bestimmte Art von ContentProvider ist.

Was mit ihrem „langfristigem, anhaltenden Zugang“

Die Uri, die Sie zurückbekommen von ACTION_GET_CONTENT können ein vorübergehende Erlaubnis Stipendium mit Ihrer App in der Lage sein zu lesen verhindern würde mich und/oder schreibe den Inhalt. Dieser Zuschuss wird eventuell hinfällig (z. B. wenn Ihr Prozess beendet wird). So kann es beispielsweise sinnlos sein, die Uri als Zeichenfolge in einer Datenbank zu speichern.

Ein Teil des Storage Access Framework beinhaltet das Konzept, dass ein Anbieter von Inhalten Berechtigungszuweisungen anbieten kann, die für einen längeren Zeitraum ("langfristig, persistent") dauern können.Es gibt zwar nichts, was eine App davon abhält, solche dauerhaften Berechtigungen mit ACTION_GET_CONTENT auf API Level 19+ anzubieten, aber sie werden häufiger unter ACTION_OPEN_DOCUMENT auftreten.

Was ist im Grunde der Unterschied zwischen den folgenden zwei Schnipsel?

wird die Erfahrung Benutzer etwas anders sein, als ACTION_OPEN_DOCUMENT eine Explorer-ähnliche Oberfläche standardisierte Datei bietet, während ACTION_GET_CONTENT ein traditionelles Auswahldialog durch eine App-spezifische Benutzeroberfläche gefolgt ist.

Von Ihrem Standpunkt als Verbraucher dieses Inhalts ist ACTION_GET_CONTENT, wenn Sie den Inhalt jetzt verwenden möchten; ACTION_OPEN_DOCUMENT ist, wenn Sie den Inhalt jetzt und später verwenden möchten.

+1

Meiner Erfahrung nach gibt es nie einen Auswahldialog. Die zwei Aktionen führen zu derselben Vollbild-Benutzeroberfläche. Es ist wie ein Datei-Explorer, aber Sie können auch eine linke Schublade voller App-Symbole herausziehen. Der einzige Unterschied bei der Verwendung jeder Aktion ist diese Liste von Apps auf der linken Seite. Wenn ich Bild-MIME-Typen übergebe, kann ich mit GET_CONTENT nicht nur meine Ordner wie Downloads erkunden, sondern habe auch einen Eintrag auf einer herausschiebbaren linken Schublade für Google Fotos, Dropbox usw. Wenn ich OPEN_DOCUMENT verwende, bekomme ich die exakt gleiche Benutzeroberfläche, Es gibt nur keine Apps in der linken Schublade, die bereit wären, mir andere Inhalte als Google Drive zu liefern. – Stephen

+2

@Stephen: "Es gibt nie einen Auswahldialog" - "ACTION_GET_CONTENT" wird einen auf Android 4.3 und älter haben. "Der einzige Unterschied bei der Verwendung jeder Aktion ist diese Liste von Apps auf der linken Seite" - einige Apps unterstützen eine der Aktionen, andere unterstützen die andere. Im Idealfall würde eine App wie Dropbox "ACTION_OPEN_DOCUMENT" auf Android 4.4+ unterstützen und auf die Unterstützung von "ACTION_GET_CONTENT" auf Android 4.3 und niedriger zurückgreifen. – CommonsWare

+0

Ich habe gerade meine Anwendung auf einem 4,3-Gerät installiert und Sie sind richtig! Ein "Picker" zeigte sich eher als die Schnittstelle vom Typ "Datei-Explorer". Danke für die Hilfe! Übrigens, liebe deine Bücher. Ich bin seit Jahren abonniert. – Stephen

Verwandte Themen