java - data.getData() 有时返回 null

标签 java android

我正在从图库中选择一个视频文件,但在某些情况下 data.getData() 返回 null。

我通过调用以下命令打开图库:

Intent intent;
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
    intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Video.Media.EXTERNAL_CONTENT_URI);
} else {
    intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Video.Media.INTERNAL_CONTENT_URI);
}

intent.setType("video/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
intent.putExtra("return-data", true);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivityForResult(intent, SELECT_VIDEO_REQUEST);

然后在 onActivityResult 中,我首先检查 data.getData() 是否为 null,如果是,我会显示一条 Toast 消息:

if (data.getData() != null) {
    //Do stuff
}else{
    //Display Toast
}

我在看到 this blog post 后就实现了上述内容.

一些用户联系我说他们经常收到 Toast 消息。

有人可以告诉我为什么从 MediaStore 选择视频文件时 data.getData 返回 null 吗?

<小时/>

编辑1:

经过更多研究,我发现 this answer 。因此,我将 startActivityForResult Intent 更改为以下内容:

startActivityForResult(Intent.createChooser(new Intent().
    setAction(Intent.ACTION_GET_CONTENT).
    setType("video/mp4"), "Select Video"),
    SELECT_VIDEO_REQUEST);

我仍然不确定这是否会解决我的问题,因为根据该答案“ACTION_PICK 的协议(protocol)要求您提供一个 Uri 来指示您从中选择的集合” 我正在做正确地。我首先检查是否安装了 SD 卡并相应地更改 Uri android.provider.MediaStore.Video.Media.EXTERNAL_CONTENT_URI

This answer还意味着以下“您会发现对 ACTION_PICK 的支持参差不齐且不一致”

如果有人能为我提供信息丰富的答案,为什么我的实现在某些情况下会失败,以及新的实现是否能解决我遇到的问题,我将不胜感激?

最佳答案

尝试这个代码,它在我的设备上运行良好

 Intent videopicker = new Intent(Intent.ACTION_GET_CONTENT);
            videopicker.setType("*/*");
            videopicker.putExtra(Intent.EXTRA_MIME_TYPES,"video/*");
            startActivityForResult(videopicker, VIDEOPICK);

onActivityResult

 @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    try {
        if (resultCode == RESULT_OK) {
            if (requestCode == VIDEOPICK) {
               Uri selectedvideo = data.getData();
               String videopath = selectedvideo.getPath();
                File file = new File(videopath);
                Log.e("path",file.getAbsolutePath());
            }
        }

    }catch (Exception e){

    }
}

关于java - data.getData() 有时返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57864256/

相关文章:

java - 自定义 Spring Roo UI 主题

android - 防止 ImageView 将 View 推离屏幕

android - 从适配器传递 Intent 时,onActivityResult Intent 为 null

java - QR码扫描后如何添加重定向

java - java默认支持哪些数据库

java - Java 中使用 Jersey 和 Moxi 出现 NoClassDef 异常

java - 错误 : Cannot find symbol class view

java - 为 TestNG 测试创建 jenkins 作业

android - 有什么方法可以在 TextView 中插入 ImageSpan 而不会破坏文本?

java - 对于Android应用程序来说,c#好还是java好?