Saya menggunakan pengelola file pihak ketiga untuk memilih file (PDF dalam kasus saya) dari sistem file.
Beginilah cara saya meluncurkan aktivitas:
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);
Inilah yang saya miliki 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);
}
}
}
}
Potongan kode dipinjam dari instruksi Open Intents File Manager yang tersedia di sini:
http://www.openintents.org/en/node/829
Tujuannya if-elseadalah kompatibilitas ke belakang. Saya ingin tahu apakah ini cara terbaik untuk mendapatkan nama file karena saya telah menemukan bahwa pengelola file lain mengembalikan semua jenis hal.
Misalnya, Documents ToGo mengembalikan sesuatu seperti berikut:
content://com.dataviz.dxtg.documentprovider/document/file%3A%2F%2F%2Fsdcard%2Fdropbox%2FTransfer%2Fconsent.pdf
yang getContentResolver().query()kembali null.
Untuk membuatnya lebih menarik, pengelola file tanpa nama (saya mendapatkan URI ini dari log klien) mengembalikan sesuatu seperti:
/./sdcard/downloads/.bin
Apakah ada cara yang disukai untuk mengekstrak nama file dari URI atau harus menggunakan penguraian string?