android - 无法从 Android 5.0.2 中的 ACTION_OPEN_DOCUMENT Intent 获取音频文件扩展名

标签 android android-5.0-lollipop

在我的一个 android 项目中,我在装有 Android 5.0.2 的三星平板电脑上遇到了以下问题:从 fragment 中,用户可以开始选择一个文件:

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);
}

Activity 结果通过

处理
@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

这几乎适用于所有内容 - 但不适用于从文件选择器左侧的“音频”链接中获取的文件。在这种情况下,我无法使用我的辅助函数确定文件扩展名。我得到的一切都是文件的名称...

我有点卡住了,尤其是因为文件选择器也没有显示扩展名。

有谁知道这个问题并可以给我一个解决它的提示吗?

最佳答案

This works fine for nearly everything

不,它没有。它适用于一小部分提供者,并且每个月都在减少。

Does anyone know this issue

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

could give me a hint to work around it?

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

关于android - 无法从 Android 5.0.2 中的 ACTION_OPEN_DOCUMENT Intent 获取音频文件扩展名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33923384/

相关文章:

java - Android 中的输入验证

Android Studio 5.2 - 刷新失败。原因 :com. google.common.collect.Maps

android - Android 5.0 Lollipop 上的 UI 失真问题

android - 添加到 FragmentTransaction 的 addSharedElement api 如何工作?

android - 有没有办法使用 Android 中的 DownloadManager 通过 LAN 下载?

java - 溢出菜单故障上的Android L阴影

android - 弹出窗口未在 android L 中正确显示

android - Bitmap.getPixel() 的替代方法

android - Sherlock 操作栏自定义字体

java - OnSharedPreferenceChangeListener 不起作用?