【发布时间】:2020-01-11 19:48:33
【问题描述】:
我正在从图库中选择一个视频文件,但在某些情况下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()是否为空,如果是我显示Toast消息:
if (data.getData() != null) {
//Do stuff
}else{
//Display Toast
}
在看到this blog post之后,我已经实现了上述。
一些用户联系我说他们经常收到Toast 消息。
谁能告诉我为什么data.getData从MediaStore选择视频文件时返回null?
编辑 1:
经过更多研究,我找到了this answer。所以我将我的startActivityForResult Intent 更改为以下内容:
startActivityForResult(Intent.createChooser(new Intent().
setAction(Intent.ACTION_GET_CONTENT).
setType("video/mp4"), "Select Video"),
SELECT_VIDEO_REQUEST);
我仍然不确定这是否会解决我的问题,因为根据该答案"The protocol for ACTION_PICK requires you to supply a Uri indicating the collection you are picking from" 我做得正确。我首先检查是否安装了 SD 卡并相应地更改 Uri android.provider.MediaStore.Video.Media.EXTERNAL_CONTENT_URI。
This answer 也暗示了下面的"you will find support of ACTION_PICK spotty and inconsistent"
如果有人能为我提供一个信息丰富的答案,我将非常感激为什么我的实施在某些情况下会失败,以及新的实施是否能解决我遇到的问题?
【问题讨论】:
-
@AbhishekKumar 请查看您提供的链接,然后查看我的实现 -
intent.setAction(Intent.ACTION_GET_CONTENT);