サードパーティのファイルマネージャーを使用して、ファイルシステムからファイル(私の場合はPDF)を選択しています。
これは私が活動を開始する方法です:
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);
これは私が持っているものです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);
}
}
}
}
コードスニペットは、ここから入手できるOpen Intents File Managerの手順から借用しています。http:
//www.openintents.org/en/node/829
の目的if-elseは、下位互換性です。他のファイルマネージャーがあらゆる種類のものを返すことがわかったので、これがファイル名を取得するための最良の方法かどうか疑問に思います。
たとえば、Documents ToGoは次のようなものを返します。
content://com.dataviz.dxtg.documentprovider/document/file%3A%2F%2F%2Fsdcard%2Fdropbox%2FTransfer%2Fconsent.pdf
上にgetContentResolver().query()戻りますnull。
さらに興味深いことに、名前のないファイルマネージャ(このURIはクライアントログから取得しました)は次のようなものを返しました。
/./sdcard/downloads/.bin
URIからファイル名を抽出する好ましい方法はありますか、それとも文字列解析に頼るべきですか?