I have 3 codes for my alarm and I am not sure where I should be putting the code for multiple alarms. Also, I am using Android Studio.
BootReceiver.java
public class BootReceiver extends BroadcastReceiver {
public final void setAlarm(Context ctxt) {
AlarmManager mgr = (AlarmManager) ctxt.getSystemService(Context.ALARM_SERVICE);
Calendar cal = Calendar.getInstance();
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(ctxt);
String time = prefs.getString("alarm_time", "12:00");
cal.set(Calendar.HOUR_OF_DAY,Timer.getHour(time));
cal.set(Calendar.MINUTE, Timer.getMinute(time));
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
if (cal.getTimeInMillis() < System.currentTimeMillis()) {
cal.add(Calendar.DAY_OF_YEAR, 1);
}
mgr.setInexactRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(),AlarmManager.INTERVAL_DAY, getPendingIntent(ctxt));
}
public static void cancelAlarm(Context ctxt) {
AlarmManager mgr = (AlarmManager) ctxt.getSystemService(Context.ALARM_SERVICE);
mgr.cancel(getPendingIntent(ctxt));
}
private static PendingIntent getPendingIntent(Context ctxt) {
Intent i = new Intent(ctxt, AlarmReceiver.class);
return(PendingIntent.getBroadcast(ctxt, 0,i, 0));
}
@Override
public void onReceive(Context ctxt, Intent intent) {setAlarm(ctxt);}
}
AlarmSettings.java
public class AlarmSettings extends PreferenceActivity {
private SharedPreferences prefs = null;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
getFragmentManager().beginTransaction().replace(android.R.id.content, new MyPreferenceFragment()).commit();
}
public static class MyPreferenceFragment extends PreferenceFragment {
@Override
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.options);
}
}
@Override
public void onResume() {
super.onResume();
prefs = PreferenceManager.getDefaultSharedPreferences(this);
prefs.registerOnSharedPreferenceChangeListener(onChange);
}
@Override
public void onPause() {
prefs.unregisterOnSharedPreferenceChangeListener(onChange);
super.onPause();
}
SharedPreferences.OnSharedPreferenceChangeListener onChange = new SharedPreferences.OnSharedPreferenceChangeListener() {
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
if ("alarm".equals(key)){
boolean enabled = prefs.getBoolean(key,false);
int flag = (enabled ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED : PackageManager.COMPONENT_ENABLED_STATE_DISABLED);
ComponentName component = new ComponentName(AlarmSettings.this, BootReceiver.class);
getPackageManager().setComponentEnabledSetting(component, flag, PackageManager.DONT_KILL_APP);
if (enabled) {
BootReceiver.setAlarm(AlarmSettings.this);
} else {
BootReceiver.cancelAlarm(AlarmSettings.this);
}
} else if ("alarm_time".equals(key)){
BootReceiver.cancelAlarm(AlarmSettings.this);
BootReceiver.setAlarm(AlarmSettings.this);
}
}
};}
AlarmReceiver.java
public class AlarmReceiver extends BroadcastReceiver {
private static final int NOTIFY_ME_ID = 1337;
@Override
public void onReceive(Context ctxt, Intent intent){
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(ctxt);
boolean useNotification = prefs.getBoolean("use_notification", true);
if (useNotification) {
NotificationManager mgr = (NotificationManager) ctxt.getSystemService(Context.NOTIFICATION_SERVICE);
PendingIntent i = PendingIntent.getActivity(ctxt, 0, new Intent(ctxt, AlarmActivity.class), 0);
Notification note = new Notification.Builder(ctxt).setContentTitle("AniTime").setContentText("Episode has been released!"). setSmallIcon(android.R.drawable.stat_notify_chat).setContentIntent(i).setAutoCancel(true).build();
note.flags |= Notification.FLAG_AUTO_CANCEL;
mgr.notify(NOTIFY_ME_ID, note);
} else {
Intent i = new Intent(ctxt, AlarmActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
ctxt.startActivity(i);
}
}
}
What I have tried:
I have tried various methods from stack overflow and this website but they don't seem to suit the code I currently have.