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

12
我试图创建一种方法来调整每个不同流的音量设置(媒体、通知、铃声等),并且有一种方法可以预览每个流的输出音量水平。我相信我已经实现了正确的代码,但是当我设置输出流类型时,没有声音播放。
这是可以正确播放用户选择的闹钟声音的代码:
Uri mediaUri=RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
MediaPlayer mp=MediaPlayer.create(getApplicationContext(), mediaUri);
//mp.setAudioStreamType(AudioManager.STREAM_ALARM);
mp.start();`

那个被注释掉的行是导致我问题的原因。我希望能够以不同音频流的音量级别听到警报声,但是当我为STREAM_ALARM或任何其他音频流包含那行代码时,没有任何声音播放。有什么想法吗?

1个回答

24

好的,经过更多的测试我找到了解决方案,如果有其他人遇到和我一样的问题,解决方法如下:在清单文件中需要添加 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
}

1
为什么你会得到 AM 但从未使用它呢? - behelit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接