通过STREAM_ALARM播放声音不会从Marshmallow开始播放

时间:2015-10-08 09:25:58

标签: android android-mediaplayer android-alarms android-6.0-marshmallow

我正在通过STREAM_ALARM播放声音:

j$('#example1').dataTable()._fnAjaxUpdate(); 

直到我尝试在Android 6上才能正常工作。在Android 6声音从头开始播放,所以如果我播放短音,则听不到声音。我尝试使用Cannot cast DBNull.Value to type 'System.Int32'. Please use a nullable type.并以其他方式初始化MediaPlayer。 它只在Android 6中使用STREAM_ALARM(其他流工作正常)。

任何帮助?

编辑:我意识到声音实际上从开始播放,但音量非常低,大约2秒后音量增加......你知道如何停用这种行为吗?

1 个答案:

答案 0 :(得分:1)

这听起来像均衡问题(也许这个音频流带有 audioSessionId ,它已经由系统均衡器处理了?)

我会在MediaPlayer初始化之前尝试以下技巧:

1)更改STREAM_ALARM音量

AudioManager mAudioManager = (AudioManager) this.getSystemService(Context.AUDIO_SERVICE);
int maxVolume = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_ALARM);
mAudioManager.setStreamVolume(AudioManager.STREAM_ALARM, maxVolume, 0 /*flags*/);

2)在prepare()

之后设置音量
//...
mp.prepare();
mp.setVolume(1.0f, 1.0f);

3)更改audioSessionId

//...
mp.setAudioStreamType(AudioManager.STREAM_ALARM);
mp.setAudioSessionId(CUSTOM_ID); //manually assign an ID here
//...

更新

4)尝试使用SoundPool API代替MediaPlayer,看看问题是否仍然存在(我还怀疑这是一个与设备相关的问题)。

5)尝试调用start()==> pause()==> MediaPlayer上的start()

@Override
public void onPrepared(MediaPlayer mp) {
    mp.start();
    mp.pause();
    mp.start();
}

6)尝试使用以下逻辑欺骗初始“低音量”时段

  
      播放前
  • ,将音量设为0
  •   
  • 播放
  •   
  • 播放2秒后,寻找位置0(这可能会消耗静音期
  •   
  • 将音量设置为最大
  •   
  • 再次播放
  •   

通过这种方式,您可以进行正常播放,初始延迟为几秒钟。

告诉我们您的进展情况,我会根据更多信息和建议更新此答案。