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のゲッターがありません。あなたの唯一の変更はリフレクションを使用することです。ウリは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

トミック、ありがとうございます!それは本当に興味深い解決策です。それは残念ですが、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

もう1つの方法は、ビューのタグにビデオUri /パスを設定し、後で取り出すことです。あなただけのアダプターで使用する場合は、タグをクリアすることを忘れないでください

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

をプレイしているものをチェックしたいとき

あなたは再生/

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

を開始します。

関連する問題