?
Solved

Android Java - comparing date/time to create a popup.

Posted on 2014-01-13
5
Medium Priority
?
536 Views
Last Modified: 2014-01-21
Hi all,

I want to create a popup alert when the time equals the time stored in a string.

I have the date time in a string like this.
strAlertDate = "14-01-2014 00:45:39";

Open in new window


I then have a timer running which does the comparison.
private Runnable updateTimerThread = new Runnable() {
	public void run() {
		
		SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
		String currentDateandTime = sdf.format(new Date());
		
		if(currentDateandTime.equals(strAlertDate)) {
			alertMessge();
		}
		customHandler.postDelayed(this, 0);
	}
};

Open in new window


However this doesn't work. Nothing happens.

Could it be something to do with timezones? Is there a better way?
0
Comment
Question by:mhdi
  • 3
  • 2
5 Comments
 
LVL 17

Expert Comment

by:krakatoa
ID: 39778712
Although I don't do Android, it's extremely likely that your Timer resolution isn't right. Your code would certainly work. I ran it with a fixed rate schedule of 1000ms Period, and it was ok. I used a Timer handled by a separate class extending TimerTask.
0
 

Author Comment

by:mhdi
ID: 39781485
Is there a better way?

The time/date of the alert changes based on other factors. I need to have an alarm go off if the time ever reaches the alert time/date.

Rather then run a timer constantly comparing like above, can I set an alarm in the android system? I would need the ability to remove and recreate the alarm if the alarm time changes before the time is reached.
0
 
LVL 17

Expert Comment

by:krakatoa
ID: 39781860
I don't know if there are alarms you can set in Android. Nearly all I know is that a separate thread timer does work - cf: your comment that "nothing happens".

A separate thread has quite low running costs, at least on desktop Java.

So your requirement actually seems to include a dynamic alarm deadline, which might be redefined before the current alarm deadline is reached - is that right? That anyway sounds like a job for a separate thread responsible for updating the alarm params.

(From where is the alarm deadline issued?)
0
 

Author Comment

by:mhdi
ID: 39781943
So your requirement actually seems to include a dynamic alarm deadline, which might be redefined before the current alarm deadline is reached - is that right?
That is correct.
(From where is the alarm deadline issued?)
The time and date comes from a webservice. The web service is automatically called every 10 minutes. Occasionally (every few hours) the alarm deadline changes.
0
 
LVL 17

Accepted Solution

by:
krakatoa earned 2000 total points
ID: 39783153
So these two pieces of code should simulate something like your requirements. This one:

import java.text.*;
import java.util.*;

class Tim extends TimerTask {



String currentDateandTime;
public static Date alarmTime;
SimpleDateFormat  sdf ;

	public Tim(){

		
		
		Timer t= new Timer();
		t.scheduleAtFixedRate(this,0,1000);
 
	}


	public void run(){

		sdf = new SimpleDateFormat("dd-MM-yyyy HH:mm");
		currentDateandTime = sdf.format(new Date());

		System.out.println(currentDateandTime);
	
		
		try{
		if(currentDateandTime.equals((new SimpleDateFormat("dd-MM-yyyy HH:mm")).format(alarmTime))){
		

			System.out.println(currentDateandTime);
			
			System.exit(0);
		}	

		System.out.println((new SimpleDateFormat("dd-MM-yyyy HH:mm")).format(alarmTime));

		}catch(Exception er){}

		
	}

}

Open in new window


will set off the alarm (just a sysout here of course), and this one :

import java.util.*;
import java.text.*;

class ArmAlarm {


static GregorianCalendar cal = new GregorianCalendar(2014,1,15,18,0);
static int mins = 0;

   public static void main(String[] args){

		Tim tim = new Tim();

		tim.run();

	while (true){

		try{
			Thread.sleep(1000);

			mins = (int)(Math.random()*60);

			System.out.println(mins);
					
			cal.set(2014, 0, 15, 19, mins);

			tim.alarmTime = cal.getTime();						

		}catch(Exception exx){}

	}

   }

}

Open in new window


serves the time.

(The way I decided was to use a random minute, so eventually the match will be made, so it takes a few iterations).

I'm not saying this is the answer - we're not near that yet I don't think.
0

Featured Post

Receive 1:1 tech help

Solve your biggest tech problems alongside global tech experts with 1:1 help.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Learn how to use the free Acronis True Image app to easily transfer data between iPhones and Android phones.
Custom Android App Development is the need of an hour for several businesses. If you go through the right firm for Android Application Development, it can make a huge difference to the ways in which customers interact with your business.
Viewers will learn how to properly install Eclipse with the necessary JDK, and will take a look at an introductory Java program. Download Eclipse installation zip file: Extract files from zip file: Download and install JDK 8: Open Eclipse and …
How to fix incompatible JVM issue while installing Eclipse While installing Eclipse in windows, got one error like above and unable to proceed with the installation. This video describes how to successfully install Eclipse. How to solve incompa…
Suggested Courses

593 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question