我正在创建一种警报类型的应用程序。当我打开一个特定的活动时,我想播放具有警报音量级别设备的自定义声音。如果设备的媒体音量已关闭且闹钟音量已打开,则应播放我的自定义声音。
我已经尝试了什么:
private void playAlarmSound(String fileName) {
MediaPlayer p = new MediaPlayer();
AudioManager audioManager= (AudioManager) getSystemService(AUDIO_SERVICE);
try {
AssetFileDescriptor afd = this.getAssets().openFd(fileName);
int volumeLevel=audioManager.getStreamVolume(AudioManager.STREAM_ALARM);
p.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
p.setVolume(volumeLevel,volumeLevel);
afd.close();
p.prepare();
} catch (Exception e) {
e.printStackTrace();
}
p.start();
}
但是当媒体音量开启时,它正在播放声音但是当媒体音量关闭时它不播放声音。
您正在读取警报音量级别,但这并不意味着音频将通过该流播放。
您需要在MediaPlayer上构建和设置AudioAttributes,指示USAGE_ALARM。
换一种说法:
p.setAudioAttributes(
new AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_ALARM)
.build()
);