8

当用户单击视频控制栏中的全屏按钮时,我正在尝试获取 HTML5 视频 URI。据此,Android 4.0的 HTML5 视频视图是 SurfaceView,而不是 VideoView。

有人可以告诉我如何在 SurfaceVideoView 中获取 URI 吗?这是我的代码。非常感谢。

webView.setWebChromeClient(new WebChromeClient(){
  @Override
  public void onShowCustomView(View view, CustomViewCallback callback) {
    super.onShowCustomView(view, callback);
    if (view instanceof FrameLayout){
      final FrameLayout frame = (FrameLayout) view;
      if (frame.getFocusedChild() instanceof SurfaceView){
        SurfaceView video= (SurfaceView) frame.getFocusedChild();
      }
    }
  });
4

1 回答 1

3

很简单,使用反射。把它放在onShowCustomView()方法里面:

android.net.Uri mUri = null;

try
{
    @SuppressWarnings("rawtypes")
    Class _VideoSurfaceView_Class_ = Class.forName("android.webkit.HTML5VideoFullScreen$VideoSurfaceView");

    java.lang.reflect.Field _HTML5VideoFullScreen_Field_ = _VideoSurfaceView_Class_.getDeclaredField("this$0");

    _HTML5VideoFullScreen_Field_.setAccessible(true);

    Object _HTML5VideoFullScreen_Instance_ = _HTML5VideoFullScreen_Field_.get(((FrameLayout) view).getFocusedChild());

    @SuppressWarnings("rawtypes")
    Class _HTML5VideoView_Class_ = _HTML5VideoFullScreen_Field_.getType().getSuperclass();

    java.lang.reflect.Field _mUri_Field_ = _HTML5VideoView_Class_.getDeclaredField("mUri");

    _mUri_Field_.setAccessible(true);

    mUri =  (Uri) _mUri_Field_.get(_HTML5VideoFullScreen_Instance_);
}
catch (Exception ex)
{   
}

if (mUri != null)
{
    // There you have, mUri is the URI of the video
}
于 2013-04-24T03:39:34.550 回答