如何正确设置MediaPlayer音频流类型

Rya*_*ink 11 audio android

我正在尝试创建一种方法来调整每个不同流(媒体,通知,铃声等)的音量设置,并有办法预览每个流的输出声级.我相信我有正确的实现,但是当我设置输出流类型时,没有播放的声音.

以下是正确播放用户所选闹钟声音的代码:

Uri mediaUri=RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
MediaPlayer mp=MediaPlayer.create(getApplicationContext(), mediaUri);
//mp.setAudioStreamType(AudioManager.STREAM_ALARM);
mp.start();`
Run Code Online (Sandbox Code Playgroud)

注释掉的是造成我问题的原因.我想在不同音频流的音量级别听到警报声,但是当我为STREAM_ALARM或任何其他音频流包含该行时,根本没有声音播放.有什么想法可以在这里发生什么?

Rya*_*ink 23

好的,经过一些测试后我找到了解决方案,它看起来像这样,以防其他人遇到我遇到的同样问题.Manifest中需要MODIFY_AUDIO_SETTINGS权限才能使用此权限.

AudioManager am=(AudioManager)getSystemService(Context.AUDIO_SERVICE);
am.setMode(AudioManager.MODE_NORMAL);
MediaPlayer mp=new MediaPlayer();
Uri ringtoneUri=RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
try
{
    mp.setDataSource(getApplicationContext(), ringtoneUri);
    mp.setAudioStreamType(AudioManager.STREAM_NOTIFICATION);
    mp.prepare();
    mp.start();
}
catch(Exception e)
{
    //exception caught in the end zone
}
Run Code Online (Sandbox Code Playgroud)