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

Posted

技术标签:

【中文标题】如何正确设置 MediaPlayer 音频流类型【英文标题】:How to correctly set MediaPlayer audio stream type 【发布时间】:2010-08-21 04:58:54 【问题描述】:

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

这是正确播放用户选择的警报声音的代码:

Uri mediaUri=RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
MediaPlayer mp=MediaPlayer.create(getApplicationContext(), mediaUri);
//mp.setAudiostreamType(AudioManager.STREAM_ALARM);
mp.start();`

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

【问题讨论】:

【参考方案1】:

好的,经过更多测试后,我找到了解决方案,它看起来像这样,以防其他人遇到与我相同的问题。 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

【讨论】:

为什么你得到了 am 但从不使用它?

以上是关于如何正确设置 MediaPlayer 音频流类型的主要内容,如果未能解决你的问题,请参考以下文章

Android 的 MediaPlayer 的 m3u8 音频流问题

如何从隔离存储播放音频(流方法除外)?

Mediaplayer 应该只播放音频文件的最后几秒钟

Android 上的音频流

如何从实时流中播放音频

Android多媒体-MediaPlayer唤醒锁及音频焦点