Проблема с кнопкой возврата в VideoView - PullRequest
5 голосов
/ 26 августа 2011

У меня возникают трудности с получением кнопки «Назад», чтобы фактически завершить свою деятельность при нажатии.Я запускаю очень простой видеовид, использую диалоги прогресса, чтобы показать диалог загрузки и готовый список, и т. Д. И т. Д., Простые вещи.В любом случае, в данный момент, когда я нажимаю кнопку «Назад», он просто отменяет диалог выполнения, покидает черный экран и снова нажимает, индикатор выполнения перезапускается !!!и затем, когда я снова нажимаю кнопку «Назад», появляется диалоговое окно с предупреждением «видео не воспроизводится».очень надоедливый.Спасибо за вашу помощь.

public class VideoActivity extends Activity {

    private VideoView mVideoView;

    private static ProgressDialog progressdialog;
    private String path;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.videoview);


        progressdialog = ProgressDialog.show(this, "", " Video Loading...", true);
        progressdialog.setCancelable(true);

        mVideoView = (VideoView) findViewById(R.id.surface_view);
        mVideoView.setMediaController(new MediaController(this));
        Bundle b = this.getIntent().getExtras();
        path = b.getString("path");
        mVideoView.setVideoURI(Uri.parse(path));


        mVideoView.setOnPreparedListener(new OnPreparedListener() {

            public void onPrepared(MediaPlayer mp) {
                progressdialog.dismiss();
                mVideoView.requestFocus();
                mVideoView.start();

            }
        });

    }

    @Override
    public void onBackPressed() {
        // TODO Auto-generated method stub
        super.onBackPressed();

        super.finish();

    }

}

Ответы [ 5 ]

14 голосов
/ 10 января 2013

Вы можете просто написать: (Нет необходимости создавать новый класс для MediaController)

mVideoView.setMediaController(new MediaController(this){
        public boolean dispatchKeyEvent(KeyEvent event)
        {
            if (event.getKeyCode() == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP)
                ((Activity) getContext()).finish();

            return super.dispatchKeyEvent(event);
        }
    });
2 голосов
/ 22 декабря 2011

Вы захотите создать собственный класс MediaController и переопределить функцию dispatchKeyEvent, чтобы захватить задний KeyEvent и сообщить о завершении действия.

См. Кнопка возврата Android и MediaController для получения дополнительнойинфо.

public class CustomMediaController extends MediaController {
    public CustomMediaController(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public CustomMediaController(Context context, boolean useFastForward) {
        super(context, useFastForward);
    }

    public CustomMediaController(Context context) {
        super(context, true);
    }

    public boolean dispatchKeyEvent(KeyEvent event)
    {
        if (event.getKeyCode() == KeyEvent.KEYCODE_BACK)
            ((Activity) getContext()).finish();

        return super.dispatchKeyEvent(event);
    }
}
0 голосов
/ 29 сентября 2012
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        System.exit(0);
    }

    return false;
}
0 голосов
/ 02 августа 2012

из CommansWare

На основании исходного кода это должно работать:

  1. Расширить MediaController (для целей этого ответа назовите его RonnieMediaController)
  2. Переопределить dispatchKeyEvent () в RonnieMediaController
  3. Перед подключением к суперклассу проверьте наличие KeyEvent.KEYCODE_BACK и, если это произошло, скажите, что ваша деятельность завершена ()
  4. Используйте RonnieMediaController вместоMediaController с вашим VideoView

Лично я бы просто оставил это в покое, так как с этим изменением ваш пользователь не может заставить RonnieMediaController исчезать по требованию.

Здесьссылка на оригинальный пост.

0 голосов
/ 26 августа 2011

finish () не убивает вашу активность, она просто сигнализирует Android, что ей больше не нужно запускать Activity.

Я помню, как решил это, поставив «return» в нужных местах.

...