3 秒間同期的に実装する必要がある関数がいくつかあります。サウンドプール、振動パターン、背景アニメーションを使用してサウンドを再生しています。3 つすべてが個別に正常に動作します。しかし、すべてが一緒に始まるように適切にタイミングを合わせることができません。
これら 3 つの関数は、15 秒ごとに繰り返し呼び出す必要があります。ボタンクリックで停止します。このようなものを使用してみましたが、正しく動作しません。
myThread = new Thread(new Runnable(){
@Override
public void run() {
// TODO Auto-generated method stub
while (shouldRun==true) {
try {
mHandler.post(new Runnable() {
@Override
public void run() {
anim();
vibration();
sound();
}
});
mHandler.postDelayed(new Runnable() {
public void run(){
try {
Thread.sleep(15000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}, 3000);
} catch (Exception e) {
// TODO: handle exception
}
}
}// end of outer run()
});
myThread.start();
これは正しい方法ですか?または他の方法がありますか?
public void vibration(){
int dash = 1000;
int medium_gap = 500;
long[] pattern = { 0, // Start immediately
dash, medium_gap,dash , medium_gap
};
// Only perform this pattern one time (-1 means "do not repeat")
v.vibrate(pattern, -1);
}
linear = (LinearLayout) findViewById(R.id.lay);// this line is after setContentView in onCreate
public void anim(){
drawable.addFrame(new ColorDrawable(Color.RED), 1000);
drawable.addFrame(new ColorDrawable(Color.WHITE), 500);
drawable.setOneShot(false);
linear.setBackgroundDrawable(drawable);
drawable.start();
}
sp = new SoundPool(5, AudioManager.STREAM_NOTIFICATION, 0);
buzzer = sp.load(this, R.raw.buzzer, 0);
public void sound(){
sp.play(buzzer, 1,1, 0, 0, 1); //start alert tone
}