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);