docloel Ответов: 0

Как установить несколько сигналов тревоги с помощью широковещательного приемника?


У меня есть 3 кода для моего будильника, и я не уверен, где я должен поместить код для нескольких будильников. Кроме того, я использую 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);
        }
    }
}


Что я уже пробовал:

Я пробовал различные методы из stack overflow и этого веб-сайта, но они, похоже, не подходят для кода, который у меня есть в настоящее время.

David Crow

- У меня есть три кода для сигнализации..."

Но вы показали только один, внутри setAlarm() функция.

Если вам нужно запланировать три отдельных сигнала тревоги, вам нужно иметь три отдельных сигнала тревоги. PendingIntent объекты. Из документации, "Если уже есть сигнал тревоги, запланированный для того же IntentSender, он сначала будет отменен."

0 Ответов