Click here to Skip to main content
15,616,232 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
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

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

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

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.
Posted
Comments
David Crow 18-Jul-18 14:50pm    
"I have 3 codes for my alarm..."

But you've only shown one, inside of the setAlarm() function.

If you need three separate alarms to be scheduled, you need to have three separate PendingIntent objects. From the documentation, "If there is already an alarm scheduled for the same IntentSender, it will first be canceled."

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900