¿Cómo diferenciar la alarma entre am y pm usando el administrador de alarmas?

Estoy creando alerta de alarma para el recordatorio de la cita para que estoy usando el siguiente código. El código está funcionando muy bien que me muestra alarma de alarma, pero el problema es que no es diferencia de alarma entre am y pm, supongo que si establezco alarma para 7am y actualmente 7pm en dispositivo entonces también mi cuadro de diálogo de alerta muestra. ¿Cómo puedo manejar eso am y pm? Utilicé este enlace para ref

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(); } 

}

Cita de cita

  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"); } } 

4 Solutions collect form web for “¿Cómo diferenciar la alarma entre am y pm usando el administrador de alarmas?”

No está manejando la AM / PM. Solo ponga estas líneas de código …

 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(" "); 

Bueno, puede agregar la comprobación de AM y PM en su save.setOnClickListener() y cambiar el valor de la hora en consecuencia:

 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; } .... } } 

Por favor use:-

 alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + alarm_time, operation); 

en lugar de

 alarmManager.set(AlarmManager.RTC_WAKEUP, alarm_time, operation); 

Leer:-

 SystemClock.elapsedRealtime() is the current time in millis add the total time to skip from now to alarm in millis. 

Solía ​​configurar la alarma con este método:

  /** * 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); } 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.