【问题标题】:Supplying option to user to play video with or without audio为用户提供播放带或不带音频的视频的选项
【发布时间】:2011-03-12 21:17:46
【问题描述】:

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

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

  public void  setStreamMute  (int streamType, boolean state)

自:API 级别 1

静音或取消静音音频流。

静音命令可防止客户端进程死亡:如果对流有活动静音请求的进程死亡,则该流将自动取消静音。

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

为了获得更好的用户体验,应用程序必须在 onPause() 中取消静音流,并且在适当的情况下再次在 onResume() 中静音。

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

【问题讨论】:

标签: android video audio


【解决方案1】:

使用 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 建议它应该通过哪个流推送音频,您可以调用 Activity.setVolumeControlStream(AudioManager.STREAM_MUSIC) 将您的 Activity 的窗口绑定到该流。

【讨论】:

  • 这是有道理的,但我很困惑如何从我的菜单按钮之一调用这些。案例 R.id.main_menu_mute:
  • 好的...我确实通过在我的“案例”中调用 mute() 来确定第一次按下按钮,但现在我需要弄清楚如何取消静音再次点击。
【解决方案2】:

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

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

【讨论】:

  • 嗨 Taraloca,我已经尝试了上述方法并且它有效.. 但是如何在后台播放音频?
猜你喜欢
  • 1970-01-01
  • 2015-06-17
  • 1970-01-01
  • 1970-01-01
  • 2016-10-14
  • 2017-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多