0

In unserer App versuchen wir, Dateien von anderen Dateispeicher-Apps zu bekommen. Öffnen Sie zum Beispiel unsere App, starten Sie die App-Auswahl, wählen Sie Dropbox, wählen Sie die Datei, öffnet die Datei in unserer App.Wie kann Google Drive mit queryIntentActivities() angezeigt werden?

Ich habe diese Absicht festgelegt, um zu versuchen, und rufen andere Anwendungen:

Intent intent = new Intent(Intent.ACTION_GET_CONTENT); 
intent.setType("*/*"); 
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 

PackageManager packageManager = getPackageManager(); 
List activities = packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY); 

Der wichtigste Teil ist queryIntentActivities, sind wir die Liste der Apps mit diesem anzuzeigen gibt welche Apps unserer Benutzer wählen können. Apps wie Dropbox und Microsoft OneDrive sind kein Problem, aber Google Drive taucht nie auf.

Was muss ich in meiner Absicht festlegen, dass Google Drive mit queryIntentActivities zurückgegeben wird?

Antwort

1

Auf Android KitKat (API 19) und höheren Geräten können Apps den Storage Access Framework verwenden und einen DocumentsProvider erstellen. In diesen Fällen stellt die Systembenutzeroberfläche die Benutzeroberfläche bereit, wenn Sie startActivity() mit einer ACTION_GET_CONTENT -Intention aufrufen - Apps müssen weder ihre eigene Benutzeroberfläche implementieren noch über eine Aktivität verfügen, die direkt GET_CONTENT verarbeitet.

Da das System UI ermöglicht den Zugriff auf beide Anwendungen die Speicherzugriffs Framework und Legacy-Anwendungen verwenden, die nur eine GET_CONTENT Aktivität liefern, sollten Sie nicht haben eine eigene App Chooser und stattdessen führen Sie einfach direkt die ACTION_GET_CONTENT Intent und es wird mit allen Apps arbeiten (und Benutzern erlauben, Dateien aus mehreren DocumentsProvider s auszuwählen, anstatt nur aus einer einzigen App, wenn Sie das Flag EXTRA_ALLOW_MULTIPLE gesetzt haben).

+0

Ich habe über Storage Access Framework nachgedacht und es scheint, als sollte es mit dem funktionieren, was wir tun, aber ich sollte auch klarstellen, dass wir API 14+ unterstützen und wir brauchen nur kurzfristigen Zugriff auf das Dokument. Es scheint, als ob "ACTION_GET_CONENT" immer noch das ist, was wir für 14+ verwenden sollten. Also meine Frage ist, ob Google Drive "ACTION_GET_CONTENT" unterstützt? Alle Antworten, die ich gesehen habe, sagen nein, aber sie sind ein paar Jahre alt. –

+0

Ja, Sie sollten definitiv 'ACTION_GET_CONTENT' verwenden, wenn Sie nur temporären Zugriff auf eine Datei haben möchten. Sie tun einfach zu viel - "ACTION_GET_CONTENT" ruft eine Benutzeroberfläche auf, mit der Benutzer aus * allen * Apps auswählen können, die über eine Aktivität verfügen, die nach 'GET_CONTENT' ** und ** von jedem 'DocumentsProvider' filtert. Starten Sie einfach den 'Intent', den Sie erstellt haben, und Sie werden sie alle aufgelistet sehen. Beachten Sie, dass aufgrund der erforderlichen Berechtigungen nur diese Systembenutzeroberfläche von 'DocumentsProviders 'lesen kann, sodass Sie nie dieselbe Liste in Ihrer App erstellen können. – ianhanniballake

Verwandte Themen