Java 是否将声音作为媒体/闹钟/铃声播放?
我的应用程序播放警报。在Android声音设置中,此声音由“铃声音量”滑块控制,而不是“报警音量”滑块。如何更改由“报警音量”控制的声音 我尝试使用setAudioAttributes,但结果是“媒体音量”滑块控制音量:Java 是否将声音作为媒体/闹钟/铃声播放?,java,android,ringtone,ringtonemanager,Java,Android,Ringtone,Ringtonemanager,我的应用程序播放警报。在Android声音设置中,此声音由“铃声音量”滑块控制,而不是“报警音量”滑块。如何更改由“报警音量”控制的声音 我尝试使用setAudioAttributes,但结果是“媒体音量”滑块控制音量: public void doAlarm(){ Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM); MediaPlayer mp = MediaPlayer.
public void doAlarm(){
Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
MediaPlayer mp = MediaPlayer.create(getApplicationContext(), notification);
mp.setAudioAttributes(new AudioAttributes.Builder().setUsage(AudioAttributes.USAGE_ALARM).build());
mp.setLooping(true);
mp.start();
}
我缺少什么?我找到了一个解决方案:不使用
.create()
方法。而是使用.setDataSource()
和.prepare()
。代码如下:
public void ringAlarm() {
Uri alarmUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
if (alarmUri == null) {
alarmUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE);
}
if (alarmUri == null) {
Log.e("ringAlarm" , "alarmUri null. Unable to get default sound URI");
return;
}
MediaPlayer mp = new MediaPlayer();
// This is what sets the media type as alarm
// Thus, the sound will be influenced by alarm volume
mp.setAudioAttributes(new AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_ALARM).build());
try {
mp.setDataSource(getApplicationContext(), alarmUri);
mp.prepare();
} catch (IOException e) {
e.printStackTrace();
}
// To continuously loop the alarm sound
mp.setLooping(true);
mp.start();
}
我找到了一个解决方案:不使用
.create()
方法。而是使用.setDataSource()
和.prepare()
。代码如下:
public void ringAlarm() {
Uri alarmUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
if (alarmUri == null) {
alarmUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE);
}
if (alarmUri == null) {
Log.e("ringAlarm" , "alarmUri null. Unable to get default sound URI");
return;
}
MediaPlayer mp = new MediaPlayer();
// This is what sets the media type as alarm
// Thus, the sound will be influenced by alarm volume
mp.setAudioAttributes(new AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_ALARM).build());
try {
mp.setDataSource(getApplicationContext(), alarmUri);
mp.prepare();
} catch (IOException e) {
e.printStackTrace();
}
// To continuously loop the alarm sound
mp.setLooping(true);
mp.start();
}