web-dev-qa-db-fra.com

Comment sélectionner un fichier sur Android en utilisant Intent

J'utilise ce code pour utiliser Intent pour sélectionner n'importe quel type de fichier et obtenir son chemin dans mon application

    //this when button click
public void onBrowse(View view) {
    Intent chooseFile;
    Intent intent;
    chooseFile = new Intent(Intent.ACTION_GET_CONTENT);
    chooseFile.addCategory(Intent.CATEGORY_OPENABLE);
    chooseFile.setType("file/*");
    intent = Intent.createChooser(chooseFile, "Choose a file");
    startActivityForResult(intent, ACTIVITY_CHOOSE_FILE);
}

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode != RESULT_OK) return;
    String path     = "";
    if(requestCode == ACTIVITY_CHOOSE_FILE)
    {
        Uri uri = data.getData();
        String FilePath = getRealPathFromURI(uri); // should the path be here in this string
        System.out.print("Path  = " + FilePath);
    }
}

public String getRealPathFromURI(Uri contentUri) {
    String [] proj      = {MediaStore.Images.Media.DATA};
    Cursor cursor       = getContentResolver().query( contentUri, proj, null, null,null);
    if (cursor == null) return null;
    int column_index    = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
    cursor.moveToFirst();
    return cursor.getString(column_index);
}

le problème lorsque le navigateur de fichiers est ouvert, je ne peux pas sélectionner un fichier, il semble qu'il ne soit pas activé lorsque j'ai appuyé sur un fichier, rien ne s'est passé, alors quel est le problème avec ce code
je télécharge une capture d'écran de mon Android mobile
image
Merci d'avance

8
user7179690

le type d'un fichier est .txt

Utilisez ensuite text/plain Comme type MIME. Comme Ian Lake l'a noté dans un commentaire, file/* N'est pas un type MIME valide.

Au-delà de cela, supprimez getRealPathFromURI() (qui ne fonctionnera pas). Il n'y a pas de chemin, au-delà du Uri lui-même. Vous pouvez lire le contenu identifié par ce Uri en appelant openInputStream() sur un ContentResolver, et vous pouvez obtenir un ContentResolver en appelant getContentResolver() sur votre Activity.

8
CommonsWare

Changez de ligne:

chooseFile.setType("file/*");

à

chooseFile.setType( "*/ *");

Cela vous aidera à choisir n'importe quel type de fichier.

Esperons que ça marche.

8
Jessy Swan