【问题标题】:Android get Video source path from VideoViewAndroid从VideoView获取视频源路径
【发布时间】:2011-09-06 14:49:05
【问题描述】:

我有 VideoView 实例。我需要知道它的视频源路径。

有可能吗?有人可以帮帮我吗?

我的 WebChromeClient 类代码是:

    @Override
public void onShowCustomView(final View view, final CustomViewCallback callback) {
    super.onShowCustomView(view, callback);

    if (view instanceof FrameLayout) {
        final FrameLayout frame = (FrameLayout) view;
        if (frame.getFocusedChild() instanceof VideoView) {
            // get video view

            video = (VideoView) frame.getFocusedChild();
        }
    }
}

如何获取video对象的视频源路径?

【问题讨论】:

    标签: android android-widget video-streaming android-webview android-videoview


    【解决方案1】:

    VideoView 没有用于视频路径/Uri 的吸气剂。你唯一的机会是使用反射。 Uri 存储在 private Uri mUri 中。要访问它,您可以使用:

    Uri mUri = null;
    try {
        Field mUriField = VideoView.class.getDeclaredField("mUri");
        mUriField.setAccessible(true);
        mUri = (Uri)mUriField.get(video);
    } catch(Exception e) {}
    

    请记住,私有字段可能会在未来的 Android 版本中发生变化。

    【讨论】:

    • 托米克,非常感谢!!!这是一个非常有趣的解决方案。可惜的是 VideoView 没有这个字段的 public getter
    【解决方案2】:

    如果您不喜欢使用这样的私有方法,可以覆盖VideoView 中的setVideoUriMethod

    public class MyVideoView extends VideoView 
    {
        Uri uri;
    
        @Override
        public void setVideoURI (Uri uri)
        {
            super.setVideoURI(uri);
            this.uri = uri;
        }
    }
    

    现在您可以根据需要访问视频视图的 uri。希望有帮助。

    【讨论】:

    • 在我看来,这是更好的答案。 Tomik 使用反射的答案有效,但将来可能会中断(跨不同 API 级别对 Android SDK 的更改)。过去我被这个咬过。
    【解决方案3】:

    另一种选择是在视图的标签上设置视频 Uri/path 并稍后检索。

    播放/开始时

    videoView.setVideoPath(localPath);
    videoView.setTag(localPath);
    

    当您想查看正在播放的内容时

    String pathOfCurrentVideoPlaying = (String)videoView.getTag();
    

    如果在适配器中使用,请记住清除标记。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-21
      相关资源
      最近更新 更多