在设备的媒体音量关闭时播放警报声
Playing an alarm sound while device's media volume is off
我正在创建一种闹钟 application.When 我打开了一个特定的 activity,我想播放带有设备闹钟音量的自定义声音。
如果设备的媒体音量已关闭而闹钟音量已打开,那么我的自定义声音应该会播放。
我已经尝试过什么:
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()
);
我正在创建一种闹钟 application.When 我打开了一个特定的 activity,我想播放带有设备闹钟音量的自定义声音。 如果设备的媒体音量已关闭而闹钟音量已打开,那么我的自定义声音应该会播放。
我已经尝试过什么:
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()
);