Android媒体应用(七)--处理音频输出的变化

原文地址:https://developer.android.google.cn/guide/topics/media-apps/volume-and-earphones.html

除了响应您的用户界面控件和媒体按钮,音频应用程序还应该对可能影响其声音的其他Android事件做出反应。

本页介绍如何处理这些情况:

  • 用户调整硬件音量控制时更改音量
  • 如果耳机在使用中断开,请停止播放

尊重音量控制

当用户在游戏或音乐应用程序中按下音量键时,音量应该改变,即使播放器在歌曲之间暂停或当前游戏位置没有音乐。
Android使用单独的音频流播放音乐,闹钟,通知,来电铃声,系统声音,通话音量和DTMF铃声。这允许用户独立地控制每个流的音量。
默认情况下,按音量控制可以修改活动音频流的音量。如果您的应用程序当前没有播放任何内容,请按音量键调整铃声音量。
除非您的应用程序是更换闹钟,否则您可能使用STREAM_MUSIC流播放音频。
为了确保音量控制调整正确的流,你应该调用setTransactionStream()传入AudioManager.STREAM_MUSIC。
setVolumeControlStream(AudioManager.STREAM_MUSIC);

在应用程序的生命周期中尽早调用此调用,通常来自控制媒体的活动或片段的onCreate()方法。只要目标活动或片段可见,就会将音量控件连接到STREAM_MUSIC。

不要吵闹

当用户从Android设备上欣赏音频时,用户有很多选择。大多数设备都具有内置扬声器,用于有线耳机的耳机插孔,还有许多设备具有蓝牙连接并支持A2DP音频。
拔下耳机或断开蓝牙设备时,音频流会自动重新路由至内置扬声器。如果你听大音量的音乐,这可能是一个嘈杂的惊喜。

幸运的是,当这种情况发生时,系统广播一个ACTION_AUDIO_BECOMING_NOISY意图。无论何时播放音频,都应该创建一个BroadcastReceiver来监听这个意图。在音乐播放器的情况下,用户通常期望播放暂停。对于游戏应用程序,您可以选择显着降低音量。你的接收器应该是这样的:

private class BecomingNoisyReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
      if (AudioManager.ACTION_AUDIO_BECOMING_NOISY.equals(intent.getAction())) {
          // Pause the playback
      }
    }
}

开始播放时注册接收器,停止时取消注册。 如果您按照本指南中的描述设计应用程序,则这些调用应显示在onPlay()和onStop()媒体会话回调中。
private IntentFilter intentFilter = new IntentFilter(AudioManager.ACTION_AUDIO_BECOMING_NOISY);
private BecomingNoisyReceiver myNoisyAudioStreamReceiver = new BecomingNoisyReceiver();

MediaSessionCompat.Callback callback = new
MediaSessionCompat.Callback() {
  @Override
  public void onPlay() {
    registerReceiver(myNoisyAudioStreamReceiver, intentFilter);
  }

  @Override
  public void onStop() {
    unregisterReceiver(myNoisyAudioStreamReceiver);
  }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值