Solved

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

Posted on 2014-01-13
5
484 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 16

Expert Comment

by:krakatoa
Comment Utility
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
Comment Utility
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 16

Expert Comment

by:krakatoa
Comment Utility
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
Comment Utility
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 16

Accepted Solution

by:
krakatoa earned 500 total points
Comment Utility
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

How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

Join & Write a Comment

Suggested Solutions

Introduction Everyone is using a smartphone these days. Contacts, messages, applications, documents, bookmarks, pictures, videos and other stuff which you created and are present only on your device come under the umbrella called “Personal Data”.…
A short article about a problem I had getting the GPS LocationListener working.
Viewers will learn one way to get user input in Java. Introduce the Scanner object: Declare the variable that stores the user input: An example prompting the user for input: Methods you need to invoke in order to properly get  user input:
This video is in connection to the article "The case of a missing mobile phone (https://www.experts-exchange.com/articles/28474/The-Case-of-a-Missing-Mobile-Phone.html)". It will help one to understand clearly the steps to track a lost android phone.

762 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

Need Help in Real-Time?

Connect with top rated Experts

11 Experts available now in Live!

Get 1:1 Help Now