Предоставление пользователю возможности воспроизводить видео со звуком или без него - PullRequest
2 голосов
/ 07 июля 2010

Я использую VideoView для воспроизведения видео в формате mp4.Я хотел бы дать пользователю возможность смотреть это видео со звуком или отключать звук, если он / она выбирает.Я не использую mediaController, позволяющий пользователю останавливаться и играть, у меня есть «сенсорные» события, управляющие этим.

ОБНОВЛЕНИЕ: у меня есть меню, к которому я добавил значок «без звука».Сейчас я пытаюсь выяснить, как добавить звук в эту кнопку.Я читаю некоторую информацию из Android AudioManager, в частности, setStreamMute.Вот что говорят API:

  public void  setStreamMute  (int streamType, boolean state)

С тех пор: Уровень API 1

Отключение или включение аудиопотока.

Команда mute защищена от смерти клиентского процесса:если процесс с активным запросом отключения звука в потоке умирает, этот поток будет отключен автоматически.

Запросы отключения звука для данного потока являются кумулятивными: AudioManager может получить несколько запросов отключения звука от одного или нескольких клиентов, иПоток будет включен только тогда, когда будет получено такое же количество запросов на включение звука.

Для лучшего взаимодействия с пользователем приложения ДОЛЖНЫ включить звук в приглушенном потоке в onPause () и при необходимости отключить звук снова в onResume ().

Этот метод должен использоваться только приложениями, которые заменяют общесистемное управление настройками звука или основным приложением телефонии.Параметры streamType Поток, который должен быть отключен / отключен.состояние Требуемое состояние отключения звука: true для отключения звука, false для отключения звука

Ответы [ 2 ]

6 голосов
/ 07 июля 2010

Используйте сервис AudioManager, чтобы отключить и включить звук только того потока, который связан с вашим видео.Из методов, которые вы объявили для ответа на сенсорные события пользователя, вызовите методы, такие как:

public void mute() {
  AudioManager am = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
  am.setStreamMute(AudioManager.STREAM_MUSIC, true);
}

public void unmute() {
  AudioManager am = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
  am.setStreamMute(AudioManager.STREAM_MUSIC, false);
}

Это оставит другие потоки (уведомления, тревоги и т. Д.) Активными, так что вы не будетеотключение звука всего устройства только для отключения звука видео.

Кроме того, если вам нужно указать вашей активности, какой поток должен воспроизводить звук, вы можете вызвать Activity.setVolumeControlStream(AudioManager.STREAM_MUSIC), чтобы привязать окно вашей активности к этому потоку.

1 голос
/ 07 июля 2010

Мне удалось реализовать мое желание, чтобы кнопка отключения звука содержалась в кнопке меню. Каждый раз, когда пользователь взаимодействует с кнопкой, видео отключается или включается. Вот код:

private AudioManager mAm;
private boolean mIsMute;

// Audio mgr
mAm = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
mIsMute = false;

public void isMute() {

      if(mIsMute){    
          mAm.setStreamMute(AudioManager.STREAM_MUSIC, false);
          mIsMute = false;

      }else{
          mAm.setStreamMute(AudioManager.STREAM_MUSIC, true);
          mIsMute = true;
      }
    }

А потом внутри моего дела:

public boolean onOptionsItemSelected(MenuItem item) {
    switch(item.getItemId()){

    // Mute
    case R.id.main_menu_mute:
        isMute();
        break;

    .........
    }

    return super.onOptionsItemSelected(item);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...