I'm trying to make an alarm for notification.
The problem I'm facing is that it's firing the notification too early...
I really need to get the date and time from date and time picker.
I have no clue whats wrong with my code. Here's is my code:
MainActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
fire = findViewById(R.id.fire);
choose = findViewById(R.id.choose);
choose.setOnClickListener(new View.OnClickListener() {
@RequiresApi(api = Build.VERSION_CODES.N)
@Override
public void onClick(View view) {
final Calendar cal = getInstance();
int year = cal.get(YEAR);
int month = cal.get(MONTH);
int day = cal.get(DAY_OF_MONTH);
final DatePickerDialog dialog = new DatePickerDialog(
MainActivity.this,
R.style.Theme_AppCompat_Light,
mDataSetListener,
year,month,day
);
dialog.setOnDateSetListener(new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker datePicker, final int year, final int day, final int month) {
final Calendar calTime = getInstance();
int hour = calTime.get(Calendar.HOUR_OF_DAY);
int minute = calTime.get(Calendar.MINUTE);
final String datum = day + "." + month + "." + year;
TimePickerDialog timePickerDialog = new TimePickerDialog(MainActivity.this,R.style.Theme_AppCompat_Light, new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker timePicker, int hour, int minute) {
final Calendar cal_new = getInstance();
cal_new.set(Calendar.YEAR,year);
cal_new.set(Calendar.MONTH,month-1);
cal_new.set(Calendar.DAY_OF_MONTH,day);
cal_new.set(Calendar.HOUR_OF_DAY,hour);
cal_new.set(Calendar.MINUTE,minute);
Toast.makeText(MainActivity.this,day + " " + month + " " + year + " " + hour + ":" + minute, Toast.LENGTH_SHORT).show();
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
Intent in = new Intent(MainActivity.this,Alarm.class);
PendingIntent pi = PendingIntent.getBroadcast(MainActivity.this,0,in,0);
alarmManager.setExact(AlarmManager.RTC_WAKEUP, cal_new.getTimeInMillis(),pi);
}
},hour,minute,true);
timePickerDialog.show();
}
});
dialog.show();
}
});
Alarm.java (BroadCastReceiver)
public class Alarm extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "Yeah", Toast.LENGTH_SHORT).show();
try {
Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
Ringtone r = RingtoneManager.getRingtone(context, notification);
r.play();
} catch (Exception e) {
e.printStackTrace();
}
}
}
I tried some solutions but it didn't help.
Thanks!
The problem is that you are setting month-1
expecting to get values from 1 to 12. The month
at onDateChanged already are 0 to 11 for compatibility with Calendar.
There is no need to modify the month you get, set it to the alarm manager like this:
cal_new.set(Calendar.MONTH, month);
Check DatePickerDiaglo doc.