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

http://wptrafficanalyzer.in/blog/setting-up-alarm-using-alarmmanager-and-waking-up-screen-and-unlocking-keypad-on-alarm-goes-off-in-android/

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


You are not handling AM / PM. Just put these lines of code ...



int timeDifference=0; 
String ampm=splitampmtime[1]; 
if(ampm.matches("PM")){ 
timeDifference=12; 
} 

int splithour = timeDifference+Integer.parseInt(splitstrtime[0]); 
String[] splitsecond = splitstrtime[1].split(" ");

      

+4


source


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


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


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







All Articles