I want to repeat the song perodic by 1minutes.
when the song finish playing wait 1 minute and restart
Please help
final Handler handler = new Handler();
Timer timer = new Timer();
TimerTask task = new TimerTask() {
public void run() {
handler.post(new Runnable() {
public void run() {
mPlayer.start();
mPlayer.setLooping(true);
}
});
}};
timer.schedule(task, 0, 60000);
You need to subscribe to the completion event in order to know when the song finishes.
Once the event is fired, than, start your delayed execution (no need for timer).
final Handler mHandler = new Handler();
mPlayer.setOnCompletionListener(new OnCompletionListener()
{
#Override
public void onCompletion(MediaPlayer mp)
{
mHandler .postDelayed(new Runnable() {
#Override
public void run() {
mPlayer.start();
}
}, 60000);
}
});
Related
Hi i have a button from which i call the given methods the problem is when i click button for the first time TextToSpeach Player doesn't play the sound but handler code execute perfectly.If i click on button again everything work perfectly means TextToSpeach play the sound.Thank you..
public void selectDest() {
TextToSpeechPlayer.playSound("hello");
new Handler().postDelayed(new Runnable() {
#Override
public void run() {
Log.d(TAG, "After 1 sec ");
}
},1000);
}
Try this
TextToSpeechPlayer.playSound("hello");
handler = new Handler();
runnable = new Runnable() {
public void run() {
//do your other task here
handler.postDelayed(this, 60 * 1000);
}
};
handler.postDelayed(runnable, 0);
public void selectDest() {
new Handler().postDelayed(new Runnable() {
#Override
public void run() {
TextToSpeechPlayer.playSound("hello");
Log.d(TAG, "After 1 sec ");
}
},1000);
}
My app needs tracking of real time so I need a button that needs to trigger every 5 seconds but I have no idea how to do it. Can you teach me how?
I want that in every 5 seconds that AsyncTask will be triggered.
btnStart.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
HashMap postLoc = new HashMap();
postLoc.put("txtLat", tvLat.getText().toString());
postLoc.put("txtLng", tvLong.getText().toString());
postLoc.put("txtOwner", pref.getString("username","").toString());
PostResponseAsyncTask taskLoc = new PostResponseAsyncTask(getActivity(), postLoc,false, new AsyncResponse() {
#Override
public void processFinish(String s) {
Log.d(TAG, tvLat.getText().toString());
Log.d(TAG, tvLong.getText().toString());
Intent i = new Intent(getActivity(),GPS_Service.class);
getActivity().startService(i);
}
});
taskLoc.execute("http://carkila.esy.es/carkila/locationUpdate.php");
}
});
I think this code might be useful to trigger the code every 5 second
Timer timer;
TimerTask timerTask;
final Handler handler = new Handler();
#Override
public void onCreate() {
super.onCreate();
startTimer();
}
public void startTimer() {
//set a new Timer
timer = new Timer();
//initialize the TimerTask's job
initializeTimerTask();
timer.schedule(timerTask, 0, 5000);
}
public void initializeTimerTask() {
timerTask = new TimerTask() {
public void run() {
handler.post(new Runnable() {
public void run() {
//code to run after every 5 seconds
}
});
}
};
}
Create a method like this and call the method on button click and also call the method by using a handler like this:
mRunnable = new Runnable() {
public void run() {
public void toBecalled_Every_5_Second();
mHandler.postDelayed(mRunnable, 5000);
}
};
mHandler.postDelayed(mRunnable, 5000);
public void toBecalled_Every_5_Second(){
PostResponseAsyncTask taskLoc = new PostResponseAsyncTask(getActivity(), postLoc,false, new AsyncResponse() {
#Override
public void processFinish(String s) {
Log.d(TAG, tvLat.getText().toString());
Log.d(TAG, tvLong.getText().toString());
Intent i = new Intent(getActivity(),GPS_Service.class);
getActivity().startService(i);
}
});
taskLoc.execute("http://carkila.esy.es/carkila/locationUpdate.php");
}
so it will call the method every 5 second and the a sync task will execute....
I would like to have a CountDownTimer which will trigger the button click function after every 5 seconds.
CountDownTimer mTimer = new CountDownTimer(50000, 1000) {
public void onTick(long millisUntilFinished) {
// Do nothing
}
public void onFinish() {
btnStart.performClick();
this.start(); // Restart
}
}.start();
You can use Timer with TimerTask and Handler to update the result to main thread i.e your UI.
Something like this:
Timer timer;
TimerTask timerTask;
//we are going to use a handler to be able to run in our TimerTask
final Handler handler = new Handler();
private void initializeTimerTask() {
timerTask = new TimerTask() {
public void run() {
//use a handler to run process
handler.post(new Runnable() {
public void run() {
/**************************/
/** Do your process here **/
/**************************/
}
});
}
};
}
private void startTimer() {
//set a new Timer
timer = new Timer();
//initialize the TimerTask's job
initializeTimerTask();
//schedule the timer, start run TimerTask then run every 5000ms i.e 5 seconds.
timer.schedule(timerTask, 0, 5000); //
}
private void stopTimerTask() {
//stop the timer, if it's not already null
if (timer != null) {
timer.cancel();
timer = null;
}
}
Insert your processing code in Handler.post(). Then start the trigger by calling startTimer(). To stop the trigger, just call stopTimerTask().
I have a timer and timer task and handler and runnable
my code be execute every 10 seconds until ServerResponse variable in not empty and then redirect to another activity.
but when my code redirect to another activity timer task is working !!!!!
how can to stop timer task when we are in another activity??
Timer timer = new Timer();
timer.schedule(new TimerTask() {
#Override
public void run() {
runOnUiThread(new Runnable() {
#Override
public void run() {
new sendDataToServer().execute();
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
#Override
public void run() {
if(serverResponse.length() > 0)
{
Intent intent = new Intent(PayementActivity.this,UserFormActivity.class);
startActivity(intent);
finish();
}
}
}, 10000);
}
});
}
}, 0, 10000);
Timer timer = new Timer();
timer.schedule(new TimerTask() {
#Override
public void run() {
runOnUiThread(new Runnable() {
#Override
public void run() {
new sendDataToServer().execute();
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
#Override
public void run() {
if(serverResponse.length() > 0)
{
Intent intent = new Intent(PayementActivity.this,UserFormActivity.class);
if(timer!= null) {
timer.cancel();
timer.purge();
timer= null;
}
startActivity(intent);
finish();
}
}
}, 10000);
}
});
}
}, 0, 10000);
This might not answer your question directly, but just reactive extensions are a nice alternative to using TimerTasks. Check this and this out.
subscription = Observable.interval(10, TimeUnit.SECONDS)
.subscribeOn(Schedulers.io())// Runs on a io thread pool
.observeOn(AndroidSchedulers.mainThread()) // Observes on UI thread
.subscribe(timeCount ->{
// Your code here
});
subscription.unsubscribe();// Stops the stream.
Rx with timer looks like the way to go. If you are not up for it Handler could work as well.
http://reactivex.io/documentation/operators/timer.html
You can try using :
TimerTask scanTask;
final Handler handler = new Handler();
Timer t = new Timer();
public void playBeep(){
scanTask = new TimerTask() {
public void run() {
handler.post(new Runnable() {
public void run() {
repeatBeep();
}
});
}};
t.schedule(scanTask, 10000, 10000);
}
public void repeatBeep(){
mp.start();
}
and call t.cancel() when you want to stop the beep
Android Repetitive Task
here is my code but the sound is not repeated
final Handler handler = new Handler();
Timer timer = new Timer();
TimerTask task = new TimerTask() {
public void run() {
handler.post(new Runnable() {
public void run() {
mPlayer.start();
}
});
}};
timer.schedule(task, 0, 60000);
if you use media player, you can use
mPlayer.setLooping(true);
by the way ,your repeat timer task is fine.