I have a TimerTask
object timerTask. My code is running but when service gets started initially, my timer task runs instantly before the specif
As other community users suggested, don't use Timertask, android has a
AlarmManager
that you can use.
Here a Snippet as Example:
public class MainActivity extends Activity {
private static final String TAG ="MainActivity";
PendingIntent myPendingIntent;
AlarmManager alarmManager;
BroadcastReceiver myBroadcastReceiver;
Calendar firingCal;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Register AlarmManager Broadcast receive.
firingCal= Calendar.getInstance();
firingCal.set(Calendar.HOUR, 8); // At the hour you want to fire the alarm
firingCal.set(Calendar.MINUTE, 0); // alarm minute
firingCal.set(Calendar.SECOND, 0); // and alarm second
long intendedTime = firingCal.getTimeInMillis();
registerMyAlarmBroadcast();
alarmManager.set( AlarmManager.RTC_WAKEUP, intendedTime , AlarmManager.INTERVAL_DAY , myPendingIntent );
}
private void registerMyAlarmBroadcast()
{
Log.i(TAG, "Going to register Intent.RegisterAlramBroadcast");
//This is the call back function(BroadcastReceiver) which will be call when your
//alarm time will reached.
myBroadcastReceiver = new BroadcastReceiver()
{
@Override
public void onReceive(Context context, Intent intent)
{
Log.i(TAG,"BroadcastReceiver::OnReceive()");
Toast.makeText(context, "Your Alarm is there", Toast.LENGTH_LONG).show();
}
};
registerReceiver(myBroadcastReceiver, new IntentFilter("com.alarm.example") );
myPendingIntent = PendingIntent.getBroadcast( this, 0, new Intent("com.alarm.example"),0 );
alarmManager = (AlarmManager)(this.getSystemService( Context.ALARM_SERVICE ));
}
private void UnregisterAlarmBroadcast()
{
alarmManager.cancel(myPendingIntent);
getBaseContext().unregisterReceiver(myBroadcastReceiver);
}
@Override
protected void onDestroy() {
unregisterReceiver(myBroadcastReceiver);
super.onDestroy();
}
}
if the time can changed dynamically in the App depending on user-inputs, then just change the Calender firingCal variable for adjusting the time.