2016-04-11 6 views

Répondre

23

Vous pouvez utiliser le ACTION_GET_CONTENT avec le type MIME intention "*/*". Il retourne l'URI sur le 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

Oui, c'est encore mieux, car il permet également d'accéder aux fichiers dans des applications comme Dropbox. Dropbox n'apparaît pas dans la liste lorsque ** ACTION_OPEN_DOCUMENT ** est utilisé. – bartolja

+0

Lorsque je fais cela avec 'set_type (" image/* ")' sur KITKAT, cela ne m'amène pas à cette boîte de dialogue, mais à la place une liste d'applications à utiliser pour l'ouverture apparaît. – Tjaart

2

Cela semble être l'interface utilisateur du système pour the Storage Access Framework. Vous utiliseriez ACTION_OPEN_DOCUMENT pour permettre à l'utilisateur d'ouvrir un document existant, ou ACTION_CREATE_DOCUMENT pour permettre à l'utilisateur de créer un nouveau document.

Cependant, il ne s'agit pas d'un fichier . C'est un contenu UI. L'utilisateur peut parcourir les éléments qui ne sont pas stockés localement — dans la capture d'écran, l'utilisateur peut parcourir ses zones Google Drive et One Drive. Et, ce que vous obtenez est a Uri pointing to content, not a file path.

+0

Oui, c'est exactement ce que je recherchais! Merci beaucoup! Juste ne savais pas que cela s'appelle le contenu, mais il est tout à fait logique ... – bartolja