我正在通过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秒后音量增加......你知道如何停用这种行为吗?答案 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(这可能会消耗静音期)
- 将音量设置为最大
- 再次播放
通过这种方式,您可以进行正常播放,初始延迟为几秒钟。
告诉我们您的进展情况,我会根据更多信息和建议更新此答案。