Jyot
Jyot

Reputation: 31

alarm is not working in the app

I am trying to fire an alarm at a user-specified time. So I have timepickerdialog from which the user will select the time. It shows me the toast that alarm is set for the specified time, but it is not working. Below is the code.

This is my MainActivity.

Calendar currentTime = Calendar.getInstance();
int hour = currentTime.get(Calendar.HOUR_OF_DAY);
int minute = currentTime.get(Calendar.MINUTE);
TimePickerDialog timePickerDialog = new TimePickerDialog(this, new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
                hours = hourOfDay;
                minutes = minute;

                Calendar calendar = Calendar.getInstance();
                calendar.set(Calendar.HOUR_OF_DAY, hours);
                calendar.set(Calendar.MINUTE, minutes);
                calendar.set(Calendar.SECOND, 0);
                Intent intent1 = new Intent(MainActivity.this, AlarmReceiver.class);
                PendingIntent pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 0,intent1, PendingIntent.FLAG_UPDATE_CURRENT);
                AlarmManager am = (AlarmManager) MainActivity.this.getSystemService(MainActivity.this.ALARM_SERVICE);
                am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent);

                Toast.makeText(getApplicationContext(), "Alarm has been set for "+hours+":"+minutes,Toast.LENGTH_LONG).show();
            }
        }, hour, minute, false);
        timePickerDialog.setTitle("Select time");
        timePickerDialog.show();

This is my AlarmReceiver.class

public class AlarmReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {

        Uri alarmRingtone = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
        if(alarmRingtone == null){
            alarmRingtone = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
        }

        Ringtone ringtone = RingtoneManager.getRingtone(context,alarmRingtone);
        ringtone.play();
    }

This is my AndroidManifest file

<uses-permission android:name="android.permission.WAKE_LOCK"/>

<receiver
        android:name=".AlarmReceiver"
        android:exported="true"
        android:enabled="true"/>

Upvotes: 0

Views: 77

Answers (1)

Dhaval Solanki
Dhaval Solanki

Reputation: 4705

Please try with following code it will be work for you

/**
     * Method for start Alarm on Every minute
     *
     * @param minutes Minute when you want to start after current time
     * @param context
     */
    public static void startAlarm(Context context, int minutes) {
        Logger.print("AlarmReceiver startAlarm  called");
        Intent alarmIntent = new Intent(context, AlarmReceiver.class);
        alarmIntent.setAction("testAPP");
        PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 123451, alarmIntent, PendingIntent.FLAG_CANCEL_CURRENT);
        AlarmManager manager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
        manager.cancel(pendingIntent);
        long alarmPeriodicTime = System.currentTimeMillis() + (minutes*60*1000);
        if (Build.VERSION.SDK_INT >= 23) {
            manager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, alarmPeriodicTime, pendingIntent);
        } else if (Build.VERSION.SDK_INT >= 19) {
            manager.setExact(AlarmManager.RTC_WAKEUP, alarmPeriodicTime, pendingIntent);
        } else {
            manager.set(AlarmManager.RTC_WAKEUP, alarmPeriodicTime, pendingIntent);
        }
    }

In the My receiver, I am calling same again

 startAlarm(context, Prefs.getLocationUpdateInterval(context));

Upvotes: 1

Related Questions