videoView没有显示任何内容

时间:2016-12-06 11:11:27

标签: android android-fragments android-videoview

我需要帮助解决Android中的VideoView问题。我已经尝试了一切,甚至查看了stackoverflow问题,但没有人有这个确切的问题。

问题: 视图应该显示从库中选择的视频(此操作由按钮触发),但即使日志中没有错误且uri不为null,视图中也不会显示任何内容。所有这些都在FragmentViewPager。 (如果查看下面的代码,则运行Log.d("FragCamera", "I_REQUEST_VIDEO_PICK mediaUri : " + mediaUri);并且mediaUri不是null。所以我不知道还有什么问题。)

顺便说一句,我正在使用Marshmallow真实设备来测试这个以及usb调试功能,并且应用程序设置为JellyBean及更高版本。而且我不认为这是一个权限问题,因为在同一页面中我使用相同的权限进行编码,并且工作正常。

任何人都可以告诉我为什么我无法让它工作?

===================================

这是我的代码。它已被剥离为触发此问题的基本代码。 checkPermission()是一种检查和请求运行时权限的方法,它可以正常工作,因为使用此函数和相同权限的其他代码可以正常工作。

fragment_camera_action.xml

<VideoView
   android:id="@+id/preview_up_vid"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:layout_gravity="center"/>

fragment.java

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    View v = inflater.inflate(R.layout.fragment_camera_action, container, false);

    uploadedVid = (VideoView) v.findViewById(R.id.preview_up_vid);
    btn_getvid = (Button) v.findViewById(R.id.btn_getvid);

    MediaController mediaController = new MediaController(ctx);
    mediaController.setAnchorView(uploadedVid);
    uploadedVid.setMediaController(mediaController);

    btn_getvid.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Log.d("FragCamera", "btn_getvid on click.");

            String[] permissions = new String[]{Manifest.permission.READ_EXTERNAL_STORAGE};

            if (checkMPermission(ctx, permissions, P_REQUEST_PICK_VIDEO)) {
                pickVideo();
            }
        }
    });

    return v;
}

private void pickVideo() {
    Log.d("FragCamera", "pickVideo()");
    Intent pickPictureIntent = new Intent(Intent.ACTION_GET_CONTENT);
    pickPictureIntent.setType("video/*");
    this.startActivityForResult(Intent.createChooser(pickPictureIntent, "Select Video"), I_REQUEST_VIDEO_PICK);
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    Log.d("FragCamera", "onActivityResult()");

    Uri mediaUri;

    if (resultCode == RESULT_OK) {

        switch (requestCode) {
            case I_REQUEST_VIDEO_PICK:
                uploadedVid.setVisibility(View.VISIBLE);

                Log.d("FragCamera", "pickVideo() RESULT_OK");

                if (data != null) {
                    mediaUri = data.getData();
                    Log.d("FragCamera", "I_REQUEST_VIDEO_PICK mediaUri : " + mediaUri);

                    uploadedVid.setVideoURI(mediaUri);
                    uploadedVid.setZOrderOnTop(true);
                    uploadedVid.start();

                }
                break;
            default:
                break;
        }

    }
}

2 个答案:

答案 0 :(得分:0)

我面临类似的问题。 uploadedVid.setZOrderOnTop(true); 是罪魁祸首。我建议你使用 compile&#39; com.sprylab.android.texturevideoview:texturevideoview:1.1.1&#39; 库而不是默认的VideoView

答案 1 :(得分:0)

经过一些测试和调整后,我终于让VideoView工作了。我发现使其成功的一些事情(至少对我而言)是:

<强> 1。它需要位于FrameLayout

我已尝试将其嵌套在RelativeLayout/LinearLayout内,并将layout_height设置为match_parentwrap_content,但它无法正常工作。使用FrameLayout layout_height的任何值似乎都不重要。

<强> 2。 VideoView layout_height必须设置为match_parent

我已检查过官方文档here,但在inherited XML部分中,没有提及它继承layout_heightlayout_width,或者即使该值必须为match_parent,但我无法以任何其他方式使其工作。虽然它确实声明它继承了minHeight,但使用wrap_content设置minHeight仍然无法呈现视图。

==

我不知道这是否有帮助,但在此之前我也会做Clean Project,所以它可能正在发挥作用。之后,我做了各种测试来触发我的问题,这导致我上面写的要点。

虽然我在SO中读到很多人使用RelativeLayout甚至LinearLayout来保持这个视图并且它与它们一起工作,但我在测试期间似乎无法使它在我的工作中运行。

希望这有助于其他遇到此问题的人。