繁体   English   中英

data.getData()有时会返回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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM