[英]Android getAbsolutePath(data.getData()) always returns null
[英]data.getData() sometimes returns null
我正在从库中选择一个视频文件,但在某些情况下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
}
看到此博客文章后,我已经实现了以上内容。
一些用户联系我,说他们经常收到Toast
消息。
有人可以告诉我为什么从MediaStore
选择视频文件时data.getData
返回null吗?
编辑1:
经过更多研究,我找到了这个答案 。 所以我将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
。
此答案还暗示以下内容: "you will find support of ACTION_PICK spotty and inconsistent"
如果有人可以为我提供丰富的答案,为什么我的实现在某些情况下会失败,以及新的实现是否可以解决我遇到的问题,我将不胜感激。
试试这个代码,它可以在我的设备上正常工作
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){
}
}
然后,如果您的android版本是7.0及更高版本,则需要设置fileprovider.xml并在实现中使用它?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.