2016-04-11 9 views

Antwort

23

Sie können die Absicht ACTION_GET_CONTENT mit dem MIME Typ "*/*" verwenden. Es wird die URI auf dem onActivityResult

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

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

     startActivityForResult(Intent.createChooser(intent, "Select a file"), 123); 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     if(requestCode==123 && resultCode==RESULT_OK) { 
      Uri selectedfile = data.getData(); //The uri with the location of the file 
     } 
    } 

Screenshot

+1

Ja, dieser Weg ist sogar noch besser, weil er auch den Zugriff auf Dateien in Apps wie Dropbox erlaubt. Dropbox wird nicht in der Liste angezeigt, wenn ** ACTION_OPEN_DOCUMENT ** verwendet wird. – bartolja

+0

Wenn ich dies mit 'set_type (" image/* ")' auf KITKAT mache, komme ich nicht zu diesem Dialog, sondern stattdessen erscheint eine Liste von Apps, die zum Öffnen benutzt werden. – Tjaart

2

Das scheint die Systembenutzeroberfläche für the Storage Access Framework zu sein. Sie würden ACTION_OPEN_DOCUMENT verwenden, damit der Benutzer ein vorhandenes Dokument öffnen kann, oder ACTION_CREATE_DOCUMENT, damit der Benutzer ein neues Dokument erstellen kann.

Dies ist jedoch keine Datei UI. Es ist ein Inhalt UI. Der Benutzer kann Dinge durchsuchen, die nicht lokal gespeichert sind — im Screenshot, der Benutzer kann ihre Google Drive und One Drive Bereiche durchsuchen. Und was Sie bekommen, ist a Uri pointing to content, not a file path.

+0

zurückkehren Ja, das ist genau das, was ich gesucht habe! Vielen Dank! Wusste einfach nicht, dass das Content heißt, aber es macht absolut Sinn ... – bartolja

Verwandte Themen