타사 파일 관리자를 사용하여 파일 시스템에서 파일 (제 경우에는 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);
}
}
}
}
코드 조각은 http://www.openintents.org/en/node/829에 있는 Open Intents 파일 관리자 지침 에서 차용되었습니다
.
의 목적 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에서 파일 이름을 추출하는 선호하는 방법이 있습니까 아니면 문자열 구문 분석에 의존해야합니까?