Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/202.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Gallery视频选择器意图无法正常工作_Android_Video_Android Intent_Gallery - Fatal编程技术网

Android Gallery视频选择器意图无法正常工作

Android Gallery视频选择器意图无法正常工作,android,video,android-intent,gallery,Android,Video,Android Intent,Gallery,这个几乎完全相同的代码可以很好地用于选择图像,但是当从视频视图中选择视频时,它会在最后插入视频之前经过一个循环。我可能要选择它7次,它将继续返回到画廊屏幕,我再次选择它,多次。有时,我会将其从多媒体资料中按出,它会插入视频,但代码似乎不知道它选择了图像,因为我为错误编写的祝酒词将在视频旁边播放。已写入运行时权限。这是在安卓棉花糖和安卓果冻豆上测试的。我尝试过使用Action.GET_CONTENT和Action.PICK,但似乎没有任何区别 vView.setOnTouchListener(ne

这个几乎完全相同的代码可以很好地用于选择图像,但是当从视频视图中选择视频时,它会在最后插入视频之前经过一个循环。我可能要选择它7次,它将继续返回到画廊屏幕,我再次选择它,多次。有时,我会将其从多媒体资料中按出,它会插入视频,但代码似乎不知道它选择了图像,因为我为错误编写的祝酒词将在视频旁边播放。已写入运行时权限。这是在安卓棉花糖和安卓果冻豆上测试的。我尝试过使用Action.GET_CONTENT和Action.PICK,但似乎没有任何区别

vView.setOnTouchListener(new View.OnTouchListener() {
                 @Override
                 public boolean onTouch(View v, MotionEvent event) {
                     videoIntent = new Intent(Intent.ACTION_GET_CONTENT, null);
                     videoIntent.setType("video/*");
                     checkIntent();// run-time permissions and intent checking //
                     startActivityForResult(videoIntent, RESULT_SHOW_VIDEO);

                     return true;
                 }
             });
         }
以及结果处理代码:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == RESULT_SHOW_VIDEO && resultCode == RESULT_OK) {

        chosenVideo = data.getData();
        videoView.setVideoURI(chosenVideo);
        videoView.start();
        newVidBtn.setEnabled(true)

// to get the path to store //
        String[] videoPath = {MediaStore.MediaColumns.DATA, MediaStore.MediaColumns.DATE_ADDED};
        Cursor cursor = getContentResolver().query(chosenVideo, videoPath, null, null, null);
         if (cursor!= null) {
             cursor.moveToFirst();
             int columnIndex = cursor.getColumnIndex(videoPath[0]);
             vidString = cursor.getString(columnIndex);
             cursor.close();
         }
    } else if(resultCode != RESULT_OK) {
        Toast.makeText(this, "Can't load this video", Toast.LENGTH_SHORT).show();
        newVidBtn.setEnabled(false);
    }
}

如果您了解发生这种情况的原因以及如何修复它,我们将不胜感激。其他类似的问题通过添加运行时权限得到了回答,或者没有得到回答

你的OnActivity结果中几乎所有内容都是错误的。您假设您正在从MediaStore获取Uri。这不是一个安全的假设。哇,这是一个快速的反应!谢谢我将再次查看onActivityResult代码。但它确实会产生视频…最终。只是通过你碰巧作为用户使用它的方式。如果用户从其他支持ACTION\u GET\u内容的视频中选择的视频不是MediaStore,该怎么办。投递箱?谷歌硬盘?无论您试图通过查询电话解决什么问题,都需要以其他方式解决。哦,我明白您的意思。但是,如果我将可从何处进行选择的选项限制为仅外部存储,在这种情况下它不会循环吗?但是,如果我将可从何处进行选择的选项限制为仅外部存储,会怎么样?您打算如何做?如果您只需要文件。你的用户可能想知道为什么他们不能在你的应用程序中使用云提供商,但这是你和用户之间的事。