How to distinguish between an alarm between am and pm using the alarm manager?
I am creating an alarm for a meeting reminder because I am using the following code. The code works very well, it shows me an alarm alert, but the only problem is that it doesn't distinguish between the alarm between am and pm, suppose if I set the alarm for 7am and it is currently 7pm in the device and mine also appears a warning dialog box. How can I manage this am and pm? I used this link for reference
AlertDemo.class
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.view.WindowManager.LayoutParams;
public class AlertDemo extends DialogFragment {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
/** Turn Screen On and Unlock the keypad when this alert dialog is displayed */
getActivity().getWindow().addFlags(LayoutParams.FLAG_TURN_SCREEN_ON | LayoutParams.FLAG_DISMISS_KEYGUARD);
/** Creating a alert dialog builder */
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
/** Setting title for the alert dialog */
builder.setTitle("Alarm");
/** Setting the content for the alert dialog */
builder.setMessage("An Alarm by AlarmManager");
/** Defining an OK button event listener */
builder.setPositiveButton("OK", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
/** Exit application on click OK */
getActivity().finish();
}
});
/** Creating the alert dialog window */
return builder.create();
}
/** The application should be exit, if the user presses the back button */
@Override
public void onDestroy() {
super.onDestroy();
getActivity().finish();
}
}
Appointment.class
import java.text.DateFormatSymbols;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.GregorianCalendar;
import android.app.Activity;
import android.app.AlarmManager;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.TimePickerDialog;
import android.app.TimePickerDialog.OnTimeSetListener;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.TimePicker;
import android.widget.Toast;
public class Appointment extends Activity {
Button date, time, save;
private static final int DIALOG_DATE = 1;
private static final int DIALOG_TIME = 2;
private int year;
private int month;
private int day;
int i;
String strmonth, strday, stryear;
String months[] = { "January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November", "December" };
int intmonth, intday, intyear, inthour, intminutes;
Calendar c = Calendar.getInstance();
private SimpleDateFormat timeFormatter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.doctor_appointment);
year = c.get(Calendar.YEAR);
month = c.get(Calendar.MONTH);
day = c.get(Calendar.DAY_OF_MONTH);
date = (Button) findViewById(R.id.btnsetdate);
time = (Button) findViewById(R.id.btnsettime);
save = (Button) findViewById(R.id.btnsave);
timeFormatter = new SimpleDateFormat("hh:mm a");
// c.set(Calendar.MONTH, 4);
date.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
showDialog(DIALOG_DATE);
}
});
time.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
showDialog(DIALOG_TIME);
}
});
save.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent("com.example.healthmanager.DemoActivity");
/** Creating a Pending Intent */
PendingIntent operation = PendingIntent.getActivity(
getBaseContext(), 0, i, Intent.FLAG_ACTIVITY_NEW_TASK);
/** Getting a reference to the System Service ALARM_SERVICE */
AlarmManager alarmManager = (AlarmManager) getBaseContext()
.getSystemService(ALARM_SERVICE);
String strtime = time.getText().toString();
Log.v("str btntime", strtime);
String[] splitstrtime = strtime.split(":");
Log.v("timestr1", splitstrtime[0]);
Log.v("timestr2", splitstrtime[1]);
int splithour = Integer.parseInt(splitstrtime[0]);
String[] splitsecond = splitstrtime[1].split(" ");
Log.v("split str second", splitsecond[0]);
int splitmin = Integer.parseInt(splitsecond[0]);
/**
* Creating a calendar object corresponding to the date and time
* set by the user
*/
// GregorianCalendar calendar = new
// GregorianCalendar(year,month,day, hour, minute);
GregorianCalendar calendar = new GregorianCalendar(intyear,
intmonth, intday, splithour, splitmin);
/**
* Converting the date and time in to milliseconds elapsed since
* epoch
*/
long alarm_time = calendar.getTimeInMillis();
/** Setting an alarm, which invokes the operation at alart_time */
alarmManager
.set(AlarmManager.RTC_WAKEUP, alarm_time, operation);
/** Alert is set successfully */
Toast.makeText(getBaseContext(), "Alarm is set successfully",
Toast.LENGTH_SHORT).show();
}
});
}
// For date dialog
@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case DIALOG_DATE:
return new DatePickerDialog(this, datePickerListener, year, month,
day);
case DIALOG_TIME:
return new TimePickerDialog(this, new OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
c.set(Calendar.HOUR_OF_DAY, hourOfDay);
c.set(Calendar.MINUTE, minute);
time.setText(timeFormatter.format(c.getTime()));
}
}, c.get(Calendar.HOUR_OF_DAY), c.get(Calendar.MINUTE), false);
}
return null;
}
// For date
private DatePickerDialog.OnDateSetListener datePickerListener = new DatePickerDialog.OnDateSetListener() {
public void onDateSet(DatePicker view, int year1, int monthOfYear,
int dayOfMonth) {
year = year1;
month = monthOfYear;
day = dayOfMonth;
// date.setText(dateFormatter.format(dateTime.getTime()));
updateDisplay();
}
};
public String getMonthForInt(int m) {
String month = "invalid";
DateFormatSymbols dfs = new DateFormatSymbols();
String[] months = dfs.getMonths();
if (m >= 0 && m <= 11) {
month = months[m];
}
return month;
}
private void updateDisplay() {
// String strDOB = month + 1 + "/" + day + "/" + year;
// Log.v("strDOB : ", strDOB);
intmonth = month;
intday = day;
intyear = year;
strmonth = Integer.toString(intmonth);
strday = Integer.toString(intday);
stryear = Integer.toString(intyear);
Log.v("month value", strmonth);
Log.v("day value", strday);
Log.v("year value", stryear);
// int one=7;
// Log.v("string limit",one.length());
for (i = 0; i < intmonth; i++) {
String strone = Integer.toString(intmonth);
strone = months[i];
// String intmonth=Integer.toString(months);
}
Log.v("month value", months[i].toString());
date.setText(months[i] + " " + day + "," + year);
}
}
DemoActivity.class
public class DemoActivity extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
/** Creating an Alert Dialog Window */
AlertDemo alert = new AlertDemo();
/** Opening the Alert Dialog Window */
alert.show(getSupportFragmentManager(), "AlertDemo");
}
}
+3
source to share
4 answers
Ok, you can add a check for AM and PM to yours save.setOnClickListener()
and change the hour accordingly:
save.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
.....
int splithour = Integer.parseInt(splitstrtime[0]); //10
String[] splitsecond = splitstrtime[1].split(" "); //40, am
Log.v("split str second", splitsecond[0]);
int splitmin = Integer.parseInt(splitsecond[0]); //40
if(splitsecond[1].equalsIgnoreCase("pm")) {
splithour += 12;
} else if(splitsecond[1].equalsIgnoreCase("am") && splithour == 12) {
splithour = 0;
}
....
}
}
+1
source to share
Please, use: -
alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,
SystemClock.elapsedRealtime() + alarm_time,
operation);
instead
alarmManager.set(AlarmManager.RTC_WAKEUP, alarm_time, operation);
Reading: -
SystemClock.elapsedRealtime() is the current time in millis add the total time to skip from now to alarm in millis.
+1
source to share
I used an alarm clock using this method:
/**
* Set the Alarm
*
* @param context the activity context
* @param id the alarm ID for this app
* @param hour the alarm hour
* @param minute the alarm minute
* @param timeZone the timezone am = Calendar.AM or pm = Calendar.PM
*/
public static void setAlarm(Context context, int id, int hour, int minute, int timeZone) {
AlarmManager alarm = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR, hour);
calendar.set(Calendar.MINUTE, minute);
calendar.set(Calendar.AM_PM, timeZone);
Intent intent = new Intent(context, PopupActivity.class);
PendingIntent pIntent = PendingIntent.getActivity(context, id, intent, 0);
alarm.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 1000 * 60 * 10, pIntent);
}
0
source to share