Reputation: 31
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
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