我有一个使用音频流的Android应用程序。创建活动后,我设置了setVolumeControlStream(AudioManager.STREAM_VOICE_CALL);
。当手机响铃时,我想将所有已存在的流静音。为此,我尝试向TelephonyManager
添加一个监听器,但我无法对任何流进行静音。以下是我的代码:
AudioManager am = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
switch (phoneCallState) {
case TelephonyManager.CALL_STATE_IDLE:
new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(5000);
am.setStreamVolume(AudioManager.STREAM_VOICE_CALL, AudioManager.ADJUST_UNMUTE, 0);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
break;
case TelephonyManager.CALL_STATE_RINGING:
audioManager.setStreamVolume(AudioManager.STREAM_VOICE_CALL, AudioManager.ADJUST_MUTE, 0);
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
audioManager.setStreamVolume(AudioManager.STREAM_VOICE_CALL, AudioManager.ADJUST_MUTE, 0);
break;
default:
Log.i(TAG, "onCallStateChanged: UNKNOWN_STATE: " + phoneCallState);
break;
}
我想要有相同的行为,例如,当我听音乐和电话响铃时,媒体播放器暂停。我提到音频流是由外部库管理的,所以我无法访问它们。
答案 0 :(得分:0)
这不是应该怎么做的。
您应该获得AudioManager
:
AudioManager = audioManager = (AudioManager) service.getSystemService(Context.AUDIO_SERVICE);
使用以下方式请求音频焦点:
android.media.AudioManager#requestAudioFocus
第一个参数是AudioManager.OnAudioFocusChangeListener
。它有一种方法可以覆盖:
android.media.AudioManager.OnAudioFocusChangeListener#onAudioFocusChange
它的参数是focusChange
,可以是以下值之一:
您感兴趣的是AUDIOFOCUS_LOSS。
如果来自图书馆的音频流不尊重失去焦点,那么它的设计很糟糕。