为从Resource(原始文件夹)播放的音频文件设置AudioStreamType

时间:2014-11-07 23:23:30

标签: android android-mediaplayer android-audiomanager

[First App]我正在创建一种Alarm应用程序,允许用户从SD卡或应用提供的声音中选择闹钟声音。因为,应用程序基本上播放警报,我希望音量为设备的“警报音量”。我能够实现SD卡的声音。但是,我无法setAudioStreamType获取原始资源声音。

我正在使用以下代码:

 MediaPlayer m_player = new MediaPlayer();
 m_player.setAudioStreamType(AudioManager.STREAM_ALARM);
 switch (bin_name) { //bin_name = various user selectable music files
     default:
        m_player = MediaPlayer.create(context, R.raw.blu);
        break;
 }
 m_player.setLooping(true);
 m_player.start();

我的blu.mp3仅在媒体卷播放。检查MediaPlayer.create(Context context, int resid) AudioStreamType后,我发现了这个:

  

请注意,由于在此方法中自动调用prepare(),因此无法更改音频流类型(请参阅setAudioStreamType(int)),音频会话ID(请参阅setAudioSessionId(int))或音频属性(请参阅setAudioAttributes(AudioAttributes))新的MediaPlayer。

我也尝试过为上述方法找到代码示例,但没有一个展示如何将AudioManager.STEAM_ALARM设置为{{1}}。我会用其他方式接受答案,只需用无限循环播放声音。怎么做到这一点?

1 个答案:

答案 0 :(得分:2)

正如您所指的文档所述,您必须自己创建并准备MediaPlayer。 Haven未尝试使用STREAM_ALARM,但我使用以下代码片段在STREAM_VOICE_CALL上播放

Uri uri = Uri.parse("android.resource://com.example.app/" + R.raw.hdsweep);
MediaPlayer mMediaPlayer = new MediaPlayer();
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_VOICE_CALL);
mMediaPlayer.setDataSource(context, uri);
mMediaPlayer.prepare();
mMediaPlayer.start()