user15473634
user15473634

Reputation: 124

AlarmScheduler not working/setting off alarm in Android Studio

I am a bit new to android studio, and i am making an app where the user can select the date and time, and it will schedule and alarm to go off at that time. However, when i set the alarm it does not go off. Does anyone know where i went wrong? Or what it is i can change within my code.

CustomDialogClass

public Activity c;
    public Dialog d;
    public CircleButton CalendarBtn, TimeBtn;
    public Button CancelBtn, ProceedBtn;
    public TextView CalendarTxt, TimeTxt;
    public EditText ReminderTxt;

    //FOR CALENDAR
    final Calendar myCalendar = Calendar.getInstance();

    //FOR CALENDAR
    private void updateLabel(TextView edittext) {
        String myFormat = "dd/MM/yy"; //In which you need put here
        SimpleDateFormat sdf = new SimpleDateFormat(myFormat, Locale.UK);

        edittext.setText(sdf.format(myCalendar.getTime()));
    }

    //FOR CALENDAR
    DatePickerDialog.OnDateSetListener date = new DatePickerDialog.OnDateSetListener() {
        @Override
        public void onDateSet(DatePicker view, int year, int monthOfYear,
                              int dayOfMonth) {
            // TODO Auto-generated method stub
            myCalendar.set(Calendar.YEAR, year);
            myCalendar.set(Calendar.MONTH, monthOfYear);
            myCalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
            updateLabel(CalendarTxt);
        }

    };

    public CustomDialogClass(Activity a) {
        super(a);
        // TODO Auto-generated constructor stub
        this.c = a;
    }


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.custom_dialog);
        CalendarTxt = (TextView) findViewById(R.id.CurrentDateSelect);
        TimeTxt = (TextView) findViewById(R.id.CurrentTimeSelect);

        CancelBtn = (Button) findViewById(R.id.CancelBtn);
        ProceedBtn = (Button) findViewById(R.id.ProceedBtn);
        CancelBtn.setOnClickListener(this);
        ProceedBtn.setOnClickListener(this);

        CalendarBtn = (CircleButton) findViewById(R.id.calendarBtn);
        TimeBtn = (CircleButton) findViewById(R.id.timeBtn);
        CalendarBtn.setOnClickListener(this);
        TimeBtn.setOnClickListener(this);

        ReminderTxt = (EditText) findViewById(R.id.ReminderTxt);


    }

    @Override
    public void onClick(View v) {
        //On click method for buttons
        switch (v.getId()) {
            case R.id.calendarBtn:

                new DatePickerDialog(getContext(), date, myCalendar
                        .get(Calendar.YEAR), myCalendar.get(Calendar.MONTH),
                        myCalendar.get(Calendar.DAY_OF_MONTH)).show();
                break;

            case R.id.CancelBtn:
                dismiss();
                break;


            case R.id.timeBtn:

                Calendar mcurrentTime = Calendar.getInstance();
                int hour = mcurrentTime.get(Calendar.HOUR_OF_DAY);
                int minute = mcurrentTime.get(Calendar.MINUTE);
                TimePickerDialog mTimePicker;
                mTimePicker = new TimePickerDialog(getContext(), new TimePickerDialog.OnTimeSetListener() {
                    @Override
                    public void onTimeSet(TimePicker timePicker, int selectedHour, int selectedMinute) {
                        String curTime = String.format("%02d:%02d", selectedHour, selectedMinute);
                        TimeTxt.setText(curTime);
                    }
                }, hour, minute, true);//Yes 24 hour time
                mTimePicker.setTitle("Select Time");
                mTimePicker.show();

                break;

            case R.id.ProceedBtn:


                String TimeVal = TimeTxt.getText().toString();
                String DateVal = CalendarTxt.getText().toString();
                String RemindVal = ReminderTxt.getText().toString();

                if ((TimeVal + DateVal + RemindVal).isEmpty()) {
                    Toast.makeText(getContext(), "No View can be Empty!", Toast.LENGTH_SHORT).show();
                } else if ((TimeVal + DateVal).isEmpty()) {
                    Toast.makeText(getContext(), "No View can be Empty!", Toast.LENGTH_SHORT).show();
                } else if ((TimeVal + RemindVal).isEmpty()) {
                    Toast.makeText(getContext(), "No View can be Empty!", Toast.LENGTH_SHORT).show();
                } else if ((DateVal + RemindVal).isEmpty()) {
                    Toast.makeText(getContext(), "No View can be Empty!", Toast.LENGTH_SHORT).show();
                } else {
                    String FinalAlarmVal = DateVal + " " + " " + TimeVal;

                    String AlarmHour = TimeVal.substring(0, 2);
                    String AlarmMins = TimeVal.substring(3, 5); 

                    String AlarmMonth = DateVal.substring(3, 5);
                    String AlarmDay = DateVal.substring(0, 2);


                    System.out.println("SEWISINGHVV-  "+ Integer.parseInt(AlarmMonth));

                    AlarmScheduler.setReminder(getContext(), Integer.parseInt(AlarmHour), Integer.parseInt(AlarmMins), Integer.parseInt(AlarmDay), Integer.parseInt(AlarmMonth)); // Here mContext is Context of Activity. If you use this code in Activity then you can pass ActivityName.this and in Fragment you can do getActivity()

                    Intent AlarmName = new Intent(getContext(), AlarmReceiver.class);
                    AlarmName.putExtra("NameOfAlarm", RemindVal);
                    getContext().startService(AlarmName);

                }


                break;
            default:
                break;
        }
        //dismiss();
        //Ends dialog when button is pressed
    }

AlarmScheduler

    public static final int DAILY_REMINDER_REQUEST_CODE = 100;
    public static final String TAG = "AlarmScheduler";

    public static void setReminder(Context context, int hour, int min, int day, int month) {

        Calendar calendar = Calendar.getInstance();

        Calendar setcalendar = Calendar.getInstance();
        setcalendar.set(Calendar.MONTH, month);
        setcalendar.set(Calendar.DAY_OF_MONTH, day);
        setcalendar.set(Calendar.HOUR_OF_DAY, hour);
        setcalendar.set(Calendar.MINUTE, min);
        setcalendar.set(Calendar.SECOND, 0);
        setcalendar.set(Calendar.MILLISECOND, 0);

        // cancel already scheduled reminders
        cancelReminder(context, AlarmReceiver.class);

        if (setcalendar.before(calendar))
            setcalendar.add(Calendar.DATE, 1);

        // Enable a receiver
        ComponentName receiver = new ComponentName(context, AlarmReceiver.class);
        PackageManager pm = context.getPackageManager();

        pm.setComponentEnabledSetting(receiver,
                PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
                PackageManager.DONT_KILL_APP);

        Intent intent1 = new Intent(context, AlarmReceiver.class);
        PendingIntent pendingIntent = PendingIntent.getBroadcast(context, DAILY_REMINDER_REQUEST_CODE, intent1, PendingIntent.FLAG_UPDATE_CURRENT);
        AlarmManager am = (AlarmManager) context.getSystemService(ALARM_SERVICE);
        am.setInexactRepeating(AlarmManager.RTC_WAKEUP, setcalendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent);


    }

    public static void cancelReminder(Context context, Class<?> cls) {

        // Disable a receiver
        ComponentName receiver = new ComponentName(context, cls);
        PackageManager pm = context.getPackageManager();

        pm.setComponentEnabledSetting(receiver,
                PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
                PackageManager.DONT_KILL_APP);

        Intent intent1 = new Intent(context, cls);
        PendingIntent pendingIntent = PendingIntent.getBroadcast(context, DAILY_REMINDER_REQUEST_CODE, intent1, PendingIntent.FLAG_UPDATE_CURRENT);
        AlarmManager am = (AlarmManager) context.getSystemService(ALARM_SERVICE);
        am.cancel(pendingIntent);
        pendingIntent.cancel();
    }

AlarmReceiver

        @Override
        public void onReceive(Context context, Intent intent) {
            Toast.makeText(context, "Alarm worked.", Toast.LENGTH_LONG).show();

        }

Upvotes: 0

Views: 294

Answers (0)

Related Questions