Как установить несколько сигналов тревоги с помощью широковещательного приемника?
У меня есть 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, он сначала будет отменен."