Android получает путь к источнику видео из VideoView - PullRequest
6 голосов
/ 06 сентября 2011

У меня есть экземпляр 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();
        }
    }
}

Как получить путь к источнику видео от видео объекта?

Ответы [ 3 ]

21 голосов
/ 06 сентября 2011

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 может измениться приватное поле.

9 голосов
/ 11 сентября 2012

Вы можете переопределить setVideoUriMethod в VideoView, если вам не нравится использование частных методов, таких как:

public class MyVideoView extends VideoView 
{
    Uri uri;

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

Теперь вы можете получить доступ к URI видео-просмотра по мере необходимости. Надеюсь, это поможет.

3 голосов
/ 09 октября 2014

Другой альтернативой может быть установка Uri / path для видео на теге представления и получение позже.

Когда вы играете / запускаете

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

Когда вы хотите проверить, что играет

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

Просто не забудьте очистить тег при использовании в адаптере.

...