次のコードとハンドラーを使用して、デバイスが完全に平らになってから 5 秒後にビープ音を生成します (加速度センサーの x、y 値)。デバイスがまだ平らな場合、サウンドは 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);