无法从Android 5.0.2中的ACTION_OPEN_DOCUMENT意图获取音频文件扩展名

时间:2015-11-25 17:57:30

标签: android android-5.0-lollipop

在我的一个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也没有显示扩展名。

有没有人知道这个问题,可以给我一些解决方法吗?

1 个答案:

答案 0 :(得分:1)

  

这适用于几乎所有内容

不,它没有。它适用于一小部分提供商,每过一个月就更少。

  

有谁知道这个问题

问题在于您依赖于本质上不可靠的代码。

  

可以给我一些解决方法吗?

如果您想使用与Uri相关联的内容,请使用ContentResolver。特别是,如果您想知道内容的MIME类型,请使用getType() on ContentResolver。从那里,您可以尝试提供相关的文件扩展名,例如通过MimeTypeMap