为用户提供选项以播放带或不带音频的视频

时间:2010-07-07 15:13:44

标签: android video audio

我正在使用VideoView播放mp4视频。我想让用户选择用声音观看这个视频,或者如果他/她选择的话将声音静音。我不使用mediaController允许用户停止和播放,我有“触摸”事件来控制它。

更新:我有一个菜单,我已经添加了一个“静音”图标。现在我想弄清楚如何将静音添加到此按钮。我正在阅读Android AudioManager的一些信息,特别是setStreamMute。以下是API的说法:

  public void  setStreamMute  (int streamType, boolean state)

自:API Level 1

将音频流静音或取消静音。

静音命令受到客户端进程死亡的保护:如果流上有活动静音请求的进程终止,则此流将自动取消静音。

对给定流的静音请求是累积的:AudioManager可以从一个或多个客户端接收多个静音请求,只有在收到相同数量的取消静音请求时才会取消静音。

为了获得更好的用户体验,应用程序必须在onPause()中取消静音流的静音,如果合适,则静音再次在onResume()中。

此方法仅应由替换平台范围的音频设置管理或主要电话应用程序的应用程序使用。 参数 streamType要静音/取消静音的流。 state所需的静音状​​态:对于静音ON为true,对于静音OFF为false

2 个答案:

答案 0 :(得分:6)

使用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 :(得分:1)

我能够实现我在​​菜单按钮中包含静音按钮的愿望。每次用户与按钮交互时,视频都会静音或取消静音。这是代码:

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);
}