问题描述
int result = audioManager.requestAudioFocus(focuschangelistener,AudioManager.STREAM_MUSIC,AudioManager.AUdioFOCUS_GAIN);
if (result == AudioManager.AUdioFOCUS_REQUEST_GRANTED) {
startMediaPlayer(songPath);
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
audioManager.registeraudioPlaybackCallback(new AudioManager.AudioPlaybackCallback() {
@Override
public void onPlaybackConfigChanged(List<AudioPlaybackConfiguration> configs) {
super.onPlaybackConfigChanged(configs);
boolean isFoundplayOtherMusic = false;
if (configs.size() > 1) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
if (configs != null) {
for (int i = 0; i < configs.size(); i++) {
if (configs.get(i).getAudioAttributes().getUsage() == USAGE_MEDIA && (configs.get(i).getAudioAttributes().getContentType() == CONTENT_TYPE_MUSIC || configs.get(i).getAudioAttributes().getContentType() == CONTENT_TYPE_UNKNowN)) {
isFoundplayOtherMusic = true;
}
}
if (isFoundplayOtherMusic) {
controls.pauseControl(getApplicationContext());
} else {
if (audioFocus == AudioManager.AUdioFOCUS_LOSS ||
audioFocus == AudioManager.AUdioFOCUS_LOSS_TRANSIENT ||
audioFocus == AudioManager.AUdioFOCUS_LOSS_TRANSIENT_CAN_DUCK) {
controls.playControl(getApplicationContext());
}
}
}
} else {
controls.pauseControl(getApplicationContext());
}
} else if (configs.size() == 0) {
if (audioFocus == AudioManager.AUdioFOCUS_LOSS ||
audioFocus == AudioManager.AUdioFOCUS_LOSS_TRANSIENT ||
audioFocus == AudioManager.AUdioFOCUS_LOSS_TRANSIENT_CAN_DUCK)
controls.playControl(getApplicationContext());
}
}
},handler);
}
这是检查音频管理器音频焦点的代码,音频管理器获得成功焦点然后播放音乐播放器,我还实现了audioChangeFocusListener,如下代码。
private AudioManager.OnAudioFocuschangelistener focuschangelistener =
new AudioManager.OnAudioFocuschangelistener() {
public void onAudioFocusChange(int focusChange) {
switch (focusChange) {
case AudioManager.AUdioFOCUS_GAIN_TRANSIENT_MAY_DUCK:
System.out.println("===== AUdioFOCUS_GAIN_TRANSIENT_MAY_DUCK : " + focusChange);
break;
case AudioManager.AUdioFOCUS_GAIN_TRANSIENT:
System.out.println("===== AUdioFOCUS_GAIN_TRANSIENT : " + focusChange);
break;
case AudioManager.AUdioFOCUS_GAIN:
System.out.println("===== AUdioFOCUS_GAIN : " + focusChange);
if (!mp.isPlaying())
controls.playControl(getApplicationContext());
break;
case AudioManager.AUdioFOCUS_LOSS:
System.out.println("===== AUdioFOCUS_LOSS : " + focusChange);
if (mp.isPlaying())
controls.pauseControl(getApplicationContext());
break;
case AudioManager.AUdioFOCUS_LOSS_TRANSIENT:
System.out.println("===== AUdioFOCUS_LOSS_TRANSIENT : " + focusChange);
if (mp.isPlaying())
controls.pauseControl(getApplicationContext());
break;
case AudioManager.AUdioFOCUS_LOSS_TRANSIENT_CAN_DUCK:
System.out.println("===== AUdioFOCUS_LOSS : " + focusChange);
}
}
};
Audio Focus 不适用于 android 9 和 10。我在我的应用中使用带有通知的音频播放。
我们的应用程序中的音频焦点而不是增益和损失,是否可以在其他应用程序播放音频时停止我们的应用程序音乐,以及当我在我的应用程序中播放音频然后停止其他应用程序的其他音乐播放器时,有可能吗? ?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)