我正在从图库中选择一个视频文件,但在某些情况下 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/