In meiner App möchte ich Alarme für mehrere Male, die vom Benutzer festgelegt werden. Wenn ich den Alarm jedoch auf ein anderes Datum und eine andere Uhrzeit einstelle, reagiert er nur auf die letzte Setup-Zeit.Alarm für mehrere Male in Android einstellen
Wie wenn ich gesetzt Alarm für Datum 20-01-2017
Zeit 10.10 am
, 20-01-2017
Zeit 10.20 am
, 20-01-2017
Zeit 10.30 am
, und so weiter nur den Alarm für zuletzt gewählte Datum & Zeit gibt. Aber gibt keinen Alarm um 20-01-2017
Zeit 10.10 am
, 20-01-2017
Zeit 10.20 am
oder andere ausgewählte Zeiten.
Wie kann ich zu allen ausgewählten Zeiten einen Alarm erhalten? ist hier mein Code:
public void setDate(View view) {
DialogFragment newFragment = new DatePickerFragment();
newFragment.show(getSupportFragmentManager(), "datePicker");
}
public void setTime(View view) {
DialogFragment newFragment = new TimePickerFragment();
newFragment.show(getSupportFragmentManager(), "timePicker");
}
public void setAlarm(View view) {
Calendar calNow = Calendar.getInstance();
Calendar calSet = (Calendar) calNow.clone();
calSet.set(Calendar.HOUR_OF_DAY, alarmHour);
calSet.set(Calendar.MINUTE, alarmMin);
calSet.set(Calendar.DAY_OF_MONTH, alarmDay);
calSet.set(Calendar.YEAR, alarmYear);
calSet.set(Calendar.MONTH, alarmMonth);
setAlarmN(calSet);
}
private void setAlarmN(Calendar targetCal) {
makeText(this, "Alarm is set at" + targetCal.getTime(),
LENGTH_LONG).show();
Intent intent = new Intent(getBaseContext(), AlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(
getBaseContext(), RQS_1, intent, 0);
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, targetCal.getTimeInMillis(),
pendingIntent);
}
//date picker fragment
public static class DatePickerFragment extends DialogFragment
implements DatePickerDialog.OnDateSetListener {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Use the current date as the default date in the picker
final Calendar c = Calendar.getInstance();
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH);
int day = c.get(Calendar.DAY_OF_MONTH);
// Create a new instance of DatePickerDialog and return it
return new DatePickerDialog(getActivity(), this, year, month, day);
}
public void onDateSet(DatePicker view, int year, int month, int day) {
// Do something with the date chosen by the user
alarmDay = day;
alarmYear = year;
alarmMonth = month;
}
}
//Time picker fragment
public static class TimePickerFragment extends DialogFragment
implements TimePickerDialog.OnTimeSetListener {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Use the current time as the default values for the picker
final Calendar c = Calendar.getInstance();
int hour = c.get(Calendar.HOUR_OF_DAY);
int minute = c.get(Calendar.MINUTE);
// Create a new instance of TimePickerDialog and return it
return new TimePickerDialog(getActivity(), this, hour, minute,
DateFormat.is24HourFormat(getActivity()));
}
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
// Do something with the time chosen by the user
alarmHour = hourOfDay;
alarmMin = minute;
}
}
Sie müssen verschiedene Intent-IDs verwenden, um es mehrere Male auszulösen. Die Verwendung derselben ID bedeutet, dass Sie die vorherige Planung abbrechen und eine neue festlegen. –
Ich bin nicht klar darüber. Kannst du mir ein Beispiel geben, wie kann ich verschiedene Intent-IDs verwenden, um das Problem zu lösen? – rabiul
'PendingIntent.getBroadcast' hat 4 Parameter 2. Parameter ist die Anfrage ID. Sie verwenden 'RQS_1'. Verwenden Sie für jeden Alarm verschiedene IDs. –