5

Tengo instancia de VideoView. Necesito saber la ruta de la fuente de video desde allí.Android get Video source path from VideoView

¿Es posible? Alguien puede ayudarme?

Mi código de la clase WebChromeClient es:

@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(); 
     } 
    } 
} 

Cómo obtener la ruta de fuente de vídeo Fron vídeo objeto?

Respuesta

15

VideoView no tiene getters para la ruta de video/Uri. Tu único cambio es usar la reflexión. El Uri se almacena en private Uri mUri. Para acceder a él puede usar:

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

Solo tenga en cuenta que un campo privado puede estar sujeto a cambios en futuras versiones de Android.

+5

Tomik, muchas gracias !!! Es una solución realmente interesante. es una lástima que el VideoView no tenga getter público para este campo – ihrupin

+0

Usted merece algún tipo de premio. Bien hecho. –

9

Puede anular la setVideoUriMethod en el VideoView si no les gusta usar métodos privados como esto:

public class MyVideoView extends VideoView 
{ 
    Uri uri; 

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

Ahora se puede acceder a la URI de la VideoView según sea necesario. Espero que ayude.

+0

En mi opinión, esta es la mejor respuesta. La respuesta de Tomik utilizando Reflection funciona, pero podría romperse en el futuro (cambios en el SDK de Android en diferentes niveles de API). Me han mordido esto en el pasado. – dell116

3

Otra alternativa sería establecer el video Uri/ruta en la etiqueta de la vista y recuperarla más tarde.

Al reproducir/Start

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

Cuando desea comprobar lo que está sonando

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

Sólo recuerde para limpiar la etiqueta si se utiliza en un adaptador.