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에 대한 getter가 없습니다. 유일한 변화는 리플렉션을 사용하는 것입니다. 우리당은 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

당신은 VideoViewsetVideoUriMethod을 무시할 수 있습니다 : 필요에 따라

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

시작합니다.

관련 문제