videoView 没有显示任何内容
videoView doesn't show anything
我需要帮助解决 Android 中的 VideoView
问题。我已经尝试了一切,甚至查看了 Whosebug 问题,但没有人遇到过这个确切的问题。
问题:
视图应该显示从图库中选择的视频(此操作由按钮触发),但即使日志中没有错误并且 uri 不为空,视图中也没有显示任何内容。所有这些都在 ViewPager
里面的 Fragment
中。 (如果查看下面的代码,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;
}
}
}
我遇到过类似的问题。 uploadedVid.setZOrderOnTop(真); 是罪魁祸首。我建议你使用 编译 'com.sprylab.android.texturevideoview:texturevideoview:1.1.1' 库而不是默认的 VideoView
经过几次测试和调整,我终于 VideoView
开始工作了。我发现使它起作用的一些事情(至少对我而言)是:
1.它需要在 FrameLayout
.
内
我尝试将它嵌套在 RelativeLayout/LinearLayout
中,并将 layout_height 设置为 match_parent
或 wrap_content
,但它不起作用。对于 FrameLayout
,layout_height
的任何一个值似乎都不重要。
2。 VideoView
layout_height
必须设置为 match_parent
我查看了官方文档here,但是在inherited XML
部分,没有提到它继承了layout_height
或layout_width
,即使值必须是 match_parent
,但我无法让它以任何其他方式工作。尽管它确实声明它继承了 minHeight
,但将 wrap_content
设置为 minHeight
仍然不会呈现视图。
======
我不知道这是否有帮助,但我也在这个工作之前做了一个 Clean Project
,所以它可能起到了一定的作用。尽管之后,我做了各种测试来触发我的问题,结果就是我上面写的要点。
虽然我在 SO 中读到很多人使用 RelativeLayout 甚至 LinearLayout 来保存这个视图并且它与他们一起工作,但我似乎无法在我的测试期间让它在我的工作中工作。
希望这对也面临此问题的其他人有所帮助。
我需要帮助解决 Android 中的 VideoView
问题。我已经尝试了一切,甚至查看了 Whosebug 问题,但没有人遇到过这个确切的问题。
问题:
视图应该显示从图库中选择的视频(此操作由按钮触发),但即使日志中没有错误并且 uri 不为空,视图中也没有显示任何内容。所有这些都在 ViewPager
里面的 Fragment
中。 (如果查看下面的代码,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;
}
}
}
我遇到过类似的问题。 uploadedVid.setZOrderOnTop(真); 是罪魁祸首。我建议你使用 编译 'com.sprylab.android.texturevideoview:texturevideoview:1.1.1' 库而不是默认的 VideoView
经过几次测试和调整,我终于 VideoView
开始工作了。我发现使它起作用的一些事情(至少对我而言)是:
1.它需要在 FrameLayout
.
我尝试将它嵌套在 RelativeLayout/LinearLayout
中,并将 layout_height 设置为 match_parent
或 wrap_content
,但它不起作用。对于 FrameLayout
,layout_height
的任何一个值似乎都不重要。
2。 VideoView
layout_height
必须设置为 match_parent
我查看了官方文档here,但是在inherited XML
部分,没有提到它继承了layout_height
或layout_width
,即使值必须是 match_parent
,但我无法让它以任何其他方式工作。尽管它确实声明它继承了 minHeight
,但将 wrap_content
设置为 minHeight
仍然不会呈现视图。
======
我不知道这是否有帮助,但我也在这个工作之前做了一个 Clean Project
,所以它可能起到了一定的作用。尽管之后,我做了各种测试来触发我的问题,结果就是我上面写的要点。
虽然我在 SO 中读到很多人使用 RelativeLayout 甚至 LinearLayout 来保存这个视图并且它与他们一起工作,但我似乎无法在我的测试期间让它在我的工作中工作。
希望这对也面临此问题的其他人有所帮助。