5

我有VideoView实例。我需要知道它的视频源路径。Android从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(); 
     } 
    } 
} 

如何获得视频源路径弗朗视频对象?

回答

15

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版本中发生变化。

+5

Tomik,非常感谢!这真的很有趣的解决方案。可惜的是VideoView没有这个领域的公共获取者 – ihrupin

+0

你应该得到某种奖励。做得很好。 –

9

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

public class MyVideoView extends VideoView 
{ 
    Uri uri; 

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

现在,您可以根据需要访问videoview的URI。希望有所帮助。

+0

在我看来,这是更好的答案。 Tomik使用Reflection的答案有效,但未来可能会中断(在不同API级别对Android SDK的更改)。过去我一直被这个问题困住。 – dell116

3

另一种替代方法是在视图的标记上设置视频Uri /路径并稍后检索。

当你玩/当你要检查什么打

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

只要记住,如果使用的适配器,以清除标签开始

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