Пример: Скачать среду можно с сайта для разработчиков Android (http://developer.android.com/sdk/index.html). Там скачать можно только Android Studio |
Многооконное приложение
12.4 Настройка интерфейса и реализация логики активности для воспроизведения аудио и видео
Настроим интерфейс активности для воспроизведения аудио и видео. Нам понадобится окно предварительного просмотра, добавим в окно активности элемент SurfaceView. Для работы приложения необходимо поле для задания расположения медиа контента для проигрывания, добавим элемент EditText, а также потребуются несколько кнопок, добавим в окно активности следующие кнопки:
b_Start | - для запуска воспроизведения контента с начала, зададим свойству On Click этой кнопки значение onClickStart; |
b_Pause | - для приостановки воспроизведения, зададим свойству On Click этой кнопки значение onClick; |
b_Resume | - для продолжения воспроизведения с места приостановки, зададим свойству On Click этой кнопки значение onClick; |
b_Stop | - для полной остановки воспроизведения, зададим свойству On Click этой кнопки значение onClick. |
Для возможности выбора зацикленного воспроизведения медиа контента добавим в окно активности элемент CheckBox.
Далее предлагаем настроить интерфейс самостоятельно. В нашем случае активность выглядит так, как показано на рис. 12.2.
Реализуем логику активности, в данном случае необходимо выполнять следующие действия:
- при нажатии на кнопку Try to play, запускается воспроизведение с начала контента, расположенного по адресу, указанному в поле ввода, расположенном слева от кнопки;
- при нажатии на кнопку Pause, воспроизведение контента приостанавливается;
- при нажатии на кнопку Resume, воспроизведение контента продолжается с места приостановки;
- при нажатии на кнопку Stop, воспроизведение контента останавливается и может быть возобновлено только с начала, т. е. необходимо снова нажать Try to play.
Элемент Loop управляет возможностью повтора воспроизведения.
Работать будем с файлом MediaActivity.java, описывающим соответствующий класс активности.
Объявим следующие поля класса активности:
MediaPlayer mediaPlayer; //управляет воспроизведением CheckBox chbLoop; //управляет режимом повтора
В методе onCreate() активности настроим чек-бокс так, чтобы он включал/выключал режим повтора для плеера.
chbLoop = (CheckBox) findViewById(R.id.chb_Loop); chbLoop.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (mediaPlayer != null) mediaPlayer.setLooping(isChecked); } });
Метод onClickStart() используется для обработки нажатий на кнопку Try to play. В этом метода сначала освобождаем ресурсы текущего проигрывателя, используя вызов метода:
releaseMP();
Этот метод рекомендуется вызывать по окончанию использования плеера, а также при onPause/onStop, если нет острой необходимости держать объект.
Реализация метода releaseMP():
private void releaseMP() { if (mediaPlayer != null) { try { mediaPlayer.release(); mediaPlayer = null; } catch (Exception e) { e.printStackTrace(); } } }
Продолжим рассмотрение метода onClickStart(). В нем после освобождения ресурсов, занимаемся подготовкой плеера к воспроизведению.
mediaPlayer = new MediaPlayer(); mediaPlayer.setDataSource(DATA); mediaPlayer.setDisplay(((SurfaceView) findViewById(R.id.surfaceView1)).getHolder()); mediaPlayer.setOnPreparedListener(this); mediaPlayer.prepareAsync();
Создаем новый объект класса MediaPlayer.
Используем метод setDataSource() для задания источника данных, в качестве параметра передаем строку из поля ввода, сохраненную в переменной DATA.
Используя метод setDisplay(), задаем экран для воспроизведения, в нашем случае элемент SurfaceView, добавленный в окно активности на этапе формирования интерфейса.
Метод prepareAsync() выполняет асинхронную подготовку плеера к воспроизведению и когда подготовка будет завершена сообщает об этом слушателю, указанному в методе setPreparedListener(). В нашем случае слушателем является сам класс активности, для этого он объявлен, как класс реализующий интерфейс OnPreparedListener. В случае готовности плеера вызывается метод onPrepared(MediaPlayer mp), объявленный в указанном интерфейсе и реализованный в классе активности, в этом методе выполняется запуск воспроизведения:
mp.start();
Существует еще метод prepare(), он также выполняет подготовку плеера, но в синхронном режиме. Для прослушивания файлов из интернета, необходимо использовать асинхронный режим, что мы и сделали.
Последние две строки метода onClickStart():
mediaPlayer.setLooping(chbLoop.isChecked()); mediaPlayer.setOnCompletionListener(this);
В первой из них определяется возможность циклического воспроизведения в зависимости от значения чек-бокса.
Во второй - задается слушатель для получения сообщения о достижении конца воспроизводимого контента. В нашем случае этим слушателем будет сам класс активности для этого он объявлен, как класс реализующий интерфейс OnCompletionListener. Полную версию метода onClickStart() можно найти в листинге 12.2.
Метод onClick() вызывается при нажатии на любую кнопку: Pause, Resume, Stop. В этом методе выполняется проверка какая кнопка была нажата и после этого выполняются соответствующие действия.
Если нажата кнопка Pause, выполняется следующая конструкция:
if (mediaPlayer.isPlaying()) mediaPlayer.pause();
Если нажата кнопка Release, выполняется следующая конструкция:
if (!mediaPlayer.isPlaying()) mediaPlayer.start();
Если нажата кнопка Stop, выполняется следующая конструкция:
mediaPlayer.stop();
Имеет смысл обратить внимание на метод активности:
protected void onDestroy() { super.onDestroy(); releaseMP(); }
В этом методе обязательно необходимо освободить ресурсы, что и выполняется вызовом метода releaseMP().
Полный код класса MediaActivity представлен в листинге 12.2.