setVolume()
不能正常工作,所以你应该通过 AudioManager 设置流音量。这个也有不好的影响,就是你改变了用户设备的整个流音量!用户不喜欢这样,所以你应该把它改回默认值。
但是怎么办?!
定义您的 AudioManager:
AudioManager am = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
存储当前音量并将流值设置为其最大值:
int currentVolume = Objects.requireNonNull(am).getStreamVolume(AudioManager.STREAM_NOTIFICATION);
am.setStreamVolume(AudioManager.STREAM_NOTIFICATION, am.getStreamMaxVolume(AudioManager.STREAM_NOTIFICATION), 0);
为其定义AudioAttributes.Builder
和设置流类型:
AudioAttributes.Builder audioAttributes = new AudioAttributes.Builder();
audioAttributes.setLegacyStreamType(AudioManager.STREAM_NOTIFICATION);
MediaPlayer
在呼叫prepare()
或之前为您设置音频属性prepareAsync()
:
mediaPlayer.setAudioAttributes(audioAttributes.build());
最后为 mediaPlayer 设置一个完成监听器并将音量更改为默认值:
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
mp.release();
am.setStreamVolume(AudioManager.STREAM_NOTIFICATION, currentVolume, 0);
}
});
结束!你可以处理这个问题。:)