Android TV: управление воспроизведением

Я пытаюсь реализовать ускоренную перемотку вперед и назад, используя PlaybackControlsRow с помощью Leanback library за Android TVОднако я не могу найти какой-либо метод, чтобы обнаружить долгое нажатие на эти кнопки. Моя текущая реализация проста, только поиск в течение 10 секунд одним щелчком мыши:

private void setupRows() {
    final ClassPresenterSelector ps = new ClassPresenterSelector();
    final PlaybackControlsRowPresenter playbackControlsRowPresenter =
            new PlaybackControlsRowPresenter(new DescriptionPresenter());

    playbackControlsRowPresenter.setOnActionClickedListener(action -> {
        if (action.getId() == playPauseAction.getId()) {
            togglePlayback(playPauseAction.getIndex() == PlayPauseAction.PLAY);
        } else if (action.getId() == fastForwardAction.getId()) {
            fastForward();
            return;
        } else if (action.getId() == rewindAction.getId()) {
            rewind();
            return;
        }
        if (action instanceof PlaybackControlsRow.MultiAction) {
            ((PlaybackControlsRow.MultiAction) action).nextIndex();
            notifyChanged(action);
        }
    });

    ps.addClassPresenter(PlaybackControlsRow.class, playbackControlsRowPresenter);
    ps.addClassPresenter(ListRow.class, new ListRowPresenter());
    rowsAdapter = new ArrayObjectAdapter(ps);

    updatePlaybackControlsRow();

    setAdapter(rowsAdapter);
}

private void fastForward() {
    ((PlaybackActivity) getActivity()).onFragmentFastForward();

    final int currentTime = ((PlaybackActivity) getActivity()).getPosition();
    playbackControlsRow.setCurrentTime(currentTime);
}

private void rewind() {
    ((PlaybackActivity) getActivity()).onFragmentRewind();

    final int currentTime = ((PlaybackActivity) getActivity()).getPosition();
    playbackControlsRow.setCurrentTime(currentTime);
}

В PlaybackActivity:

public void onFragmentFastForward() {
    // Fast forward 10 seconds.
    videoView.seekTo(videoView.getCurrentPosition() + (10 * 1000));
}

public void onFragmentRewind() {
    videoView.seekTo(videoView.getCurrentPosition() - (10 * 1000));
}

Можно ли осуществить быструю перемотку вперед и назад при длительном нажатии на действия, например, событиях нажатия клавиш вверх / вниз на кнопках действий?

1 ответ

Решение

После поиска других решений, кажется, что PlaybackControlsRowPresenter разработан таким образом, что он не должен иметь длительных нажатий, а вместо этого увеличивает / уменьшает скорость на количество нажатий на кнопки быстрой перемотки вперед / назад. Это хорошо видно из внутренней реализации конструктора PlaybackControlsRowPresenter.FastForwardAction а также PlaybackControlsRowPresenter.RewindAction классы:

/**
 * Constructor
 * @param context Context used for loading resources.
 * @param numSpeeds Number of supported fast forward speeds.
 */
public FastForwardAction(Context context, int numSpeeds) {

Таким образом, в результате мое решение на данный момент заключается в увеличении / уменьшении скорости при каждом нажатии кнопок быстрой перемотки вперед / назад (что по умолчанию выполняется в пользовательском интерфейсе). После этого, когда я нажимаю на воспроизведение - он просто возобновляет видео с искомой точки.

Другие вопросы по тегам