我使用以下代码和处理程序在我的设备完全平坦(加速度计 x,y 值)后 5 秒后产生哔声。如果设备仍然平坦,则声音每 5 秒再现一次。问题是代码第一次可以正常工作,我将设备放平,但如果它不平并尝试再次放平,则处理程序不起作用并且声音立即产生并遵循“lastBip”语句. 我想每次设备不平整时我都必须尝试重置处理程序但是我不知道怎么做。我想要的是,当我的设备平坦时,声音应该在我的应用程序运行的所有时间后 5 秒后工作,而不仅仅是我第一次打开它时。有人知道我必须对我的代码进行哪些更改才能正常工作吗?先感谢您..
handler.postDelayed(new Runnable() {
@Override
public void run() {
if (x > -0.1 && x < 0.1 && y > -0.1 && y < 0.1 && System.currentTimeMillis() - lastBip > bipRate) {
AudioManager mgr = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
float streamVolumeCurrent = mgr.getStreamVolume(AudioManager.STREAM_RING);
float streamVolumeMax = mgr.getStreamMaxVolume(AudioManager.STREAM_RING);
float volume = streamVolumeCurrent / streamVolumeMax;
lastBip = System.currentTimeMillis();
soundPool.play(bipSoundID, volume, volume, 1, 0, 1);
}
}
}, 5000);