在我的一个Android项目中,我在使用Android 5.0.2的三星平板电脑上面临以下问题:从片段中,用户可以开始选择文件:
private static final int REQUEST_CHOOSE_FILE = 1;
...
private void chooseFile() {
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("*/*");
this.startActivityForResult(intent, REQUEST_CHOOSE_FILE);
}
活动结果通过
处理@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CHOOSE_FILE && resultCode == Activity.RESULT_OK && data != null) {
Uri uri = data.getData();
String path = Util.getPath(this.getBaseActivity().getApplicationContext(), uri);
...
}
}
Util.getPath(...)
取自Get real path from URI, Android KitKat new storage access framework
这适用于几乎所有内容 - 但不适用于从"音频"链接在filechooser的左侧部分。在这种情况下,我无法使用我的帮助函数确定文件扩展名。我得到的一切都是文件的名称......
我有点卡住了,特别是因为filechooser也没有显示扩展名。
有没有人知道这个问题,可以给我一些解决方法吗?
答案 0 :(得分:1)
这适用于几乎所有内容
不,它没有。它适用于一小部分提供商,每过一个月就更少。
有谁知道这个问题
问题在于您依赖于本质上不可靠的代码。
可以给我一些解决方法吗?
如果您想使用与Uri
相关联的内容,请使用ContentResolver
。特别是,如果您想知道内容的MIME类型,请使用getType()
on ContentResolver
。从那里,您可以尝试提供相关的文件扩展名,例如通过MimeTypeMap
。