5

Ho istanza VideoView. Ho bisogno di conoscere il percorso sorgente video da esso.Android ottiene il percorso di origine video da VideoView

È possibile? Qualcuno può aiutarmi?

Il mio codice dalla classe 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(); 
     } 
    } 
} 

Come ottenere il video percorso di origine fron il video oggetto?

risposta

15

VideoView non ha getter per il percorso video/Uri. Il tuo unico cambiamento è usare la riflessione. L'Uri è memorizzato in private Uri mUri. Per accedervi è possibile utilizzare:

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

Basta ricordare che un campo privato potrebbe essere soggetto a modifiche nelle future versioni di Android.

+5

Tomik, grazie mille !!! È una soluzione davvero interessante. è un peccato che la VideoView non abbia getter pubblico per questo campo – ihrupin

+0

Ti meriti qualche tipo di premio. Ben fatto. –

9

È possibile sostituire il setVideoUriMethod nel VideoView se non vi piace utilizzando metodi privati ​​come questo:

public class MyVideoView extends VideoView 
{ 
    Uri uri; 

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

Ora è possibile accedere l'URI del VideoView, se necessario. Spero possa aiutare.

+0

Secondo me, questa è la risposta migliore. La risposta di Tomik utilizzando Reflection funziona, ma potrebbe rompersi in futuro (modifiche all'SDK di Android attraverso diversi livelli API). Sono stato morso da questo in passato. – dell116

3

Un'altra alternativa sarebbe quella di impostare il video Uri/percorso sul tag della vista e recuperare in seguito.

Quando giochi/Start

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

Quando si desidera controllare che cosa sta giocando

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

Basta ricordarsi di cancellare il tag se si utilizza un adattatore.