Want to win a PS4? Go Premium and enter to win our High-Tech Treats giveaway. Enter to Win

x
?
Solved

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

Posted on 2014-01-13
5
Medium Priority
?
525 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 3
  • 2
5 Comments
 
LVL 16

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 16

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 16

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

Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

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

In this post we will learn different types of Android Layout and some basics of an Android App.
In this post we will learn how to connect and configure Android Device (Smartphone etc.) with Android Studio. After that we will run a simple Hello World Program.
Viewers learn about the “for” loop and how it works in Java. By comparing it to the while loop learned before, viewers can make the transition easily. You will learn about the formatting of the for loop as we write a program that prints even numbers…
This theoretical tutorial explains exceptions, reasons for exceptions, different categories of exception and exception hierarchy.
Suggested Courses

618 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