Java data.getData()有时返回null

Java data.getData()有时返回null,java,android,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_CONT

我正在从库中选择一个视频文件,但在某些情况下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);
startActivityForResult(Intent.createChooser(new Intent().
    setAction(Intent.ACTION_GET_CONTENT).
    setType("video/mp4"), "Select Video"),
    SELECT_VIDEO_REQUEST);
然后在onActivityResult中,我首先检查data.getData是否为null,如果为null,我将显示一条Toast消息:

我在看到后实现了上述功能

一些用户联系我说,他们经常收到敬酒的信息

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

编辑1:

在做了更多的研究之后,我发现。因此,我将我的startActivityForResult意图更改为:

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);
startActivityForResult(Intent.createChooser(new Intent().
    setAction(Intent.ACTION_GET_CONTENT).
    setType("video/mp4"), "Select Video"),
    SELECT_VIDEO_REQUEST);
我仍然不确定这是否能解决我的问题,因为根据这个答案,ACTION_PICK的协议要求您提供一个Uri,指示您从中选择的集合是否正确。我首先检查是否安装了SD卡,并相应地更改Uri android.provider.MediaStore.Video.Media.EXTERNAL_CONTENT_Uri

也意味着你会发现以下行动的支持是零碎和不一致的


如果有人能告诉我为什么我的实现在某些情况下失败,如果新的实现能解决我遇到的问题,我将不胜感激。

那么,如果你的android版本是7.0及以上,你需要设置fileprovider.xml。你在实现中使用过它吗?

试试这段代码,效果很好在我的设备上

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


请参考@AbhishekKumar请查看您提供的链接,然后查看我的实现-intent.setActionIntent.ACTION\u GET\u内容;当您希望与其他应用程序共享应用程序中的文件时,应使用文件提供程序。我正在选择文件,不必使用文件提供程序。