J'utilise un gestionnaire de fichiers tiers pour sélectionner un fichier (PDF dans mon cas) dans le système de fichiers.
C'est ainsi que je lance l'activité :
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType(getString(R.string.app_pdf_mime_type));
intent.addCategory(Intent.CATEGORY_OPENABLE);
String chooserName = getString(R.string.Browse);
Intent chooser = Intent.createChooser(intent, chooserName);
startActivityForResult(chooser, ActivityRequests.BROWSE);
Voici ce que j'ai en onActivityResult
:
Uri uri = data.getData();
if (uri != null) {
if (uri.toString().startsWith("file:")) {
fileName = uri.getPath();
} else { // uri.startsWith("content:")
Cursor c = getContentResolver().query(uri, null, null, null, null);
if (c != null && c.moveToFirst()) {
int id = c.getColumnIndex(Images.Media.DATA);
if (id != -1) {
fileName = c.getString(id);
}
}
}
}
L'extrait de code est emprunté à Ouvrir le gestionnaire de fichiers Intents sont disponibles ici :
http://www.openintents.org/en/node/829
L'objectif de la if-else
est la compatibilité ascendante. Je me demande si c'est la meilleure façon d'obtenir le nom du fichier, car j'ai constaté que d'autres gestionnaires de fichiers renvoient toutes sortes de choses.
Par exemple, Documents ToGo renvoie quelque chose comme ce qui suit :
content://com.dataviz.dxtg.documentprovider/document/file%3A%2F%2F%2Fsdcard%2Fdropbox%2FTransfer%2Fconsent.pdf
sur lequel getContentResolver().query()
retours null
.
Pour rendre les choses plus intéressantes, le gestionnaire de fichiers sans nom (j'ai obtenu cet URI à partir du journal du client) a renvoyé quelque chose comme :
/./sdcard/downloads/.bin
Existe-t-il un moyen privilégié d'extraire le nom du fichier à partir de l'URI ou faut-il recourir à l'analyse des chaînes de caractères ?