[英]Playing sound as Media/Alarm/Ringtone?
我的應用程序發出警報。 在Android聲音設置中,此聲音是由“鈴聲音量”滑塊控制的,而不是由“警報音量”滑塊控制的。 如何更改聲音以通過“警報音量”控制?
public void doAlarm(){
Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
r = RingtoneManager.getRingtone(getApplicationContext(), notification);
if (!r.isPlaying())
r.play();
}
我嘗試使用setAudioAttributes,但結果是“媒體音量”滑塊控制了音量:
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();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.