2017-01-26 4 views
0

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; 
    } 
} 
+0

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. –

+0

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

+0

'PendingIntent.getBroadcast' hat 4 Parameter 2. Parameter ist die Anfrage ID. Sie verwenden 'RQS_1'. Verwenden Sie für jeden Alarm verschiedene IDs. –

Antwort

0

Problem in Ihrer void setAlarmN() Methode. Sie können keine Alarmbenachrichtigung mit derselben ID generieren. Das sollte bedeuten, dass die Benachrichtigung davor abgebrochen und außer Kraft gesetzt wird. Versuchen Sie, eine eindeutige ID für RQS_1 jedes Mal zu setzen, wenn PendingIntent.getBroadcast() aufgerufen wird. Wahrscheinlich müssen Sie private Variable deklarieren und inkrementieren.

+0

Ich habe {private int RQS_1; RQS_1 = (int) System.currentTimeMillis();} Aber immer noch das gleiche Problem. – rabiul

Verwandte Themen