Android Alarm Manager с вещательным приемником, зарегистрированным в коде, а не на манифесте
-
27-09-2019 - |
Вопрос
Я хочу использовать тревогу для запуска некоторых кода в определенное время. Я успешно реализовал сигнал тревоги с помощью вещательного приемника, зарегистрированного в манифесте, но так я понимаю, этот метод использует отдельный класс для вещательного приемника.
Я могу использовать этот метод, чтобы начать другое действие, но я не могу использовать его для запуска метода в моем главном видимости?
(Как я могу уведомить беговую активность от широковещательного приемника?)
Поэтому я пытался зарегистрировать мою трансляцию приемника в мою основную деятельность, как объяснено в ответ выше.
private BroadcastReceiver receiver = new BroadcastReceiver(){
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "hello", Toast.LENGTH_SHORT).show();
uploadDB();
}
};
public void onResume() {
super.onResume();
IntentFilter filter = new IntentFilter();
filter.addAction(null);
this.registerReceiver(this.receiver, filter);
}
public void onPause() {
super.onPause();
this.unregisterReceiver(this.receiver);
}
Однако я не смог заставить это работать с диспетчером тревоги, я не уверен, что я должен связать сигнал тревоги, намеревающийся для широковещательного приемника. Может ли кто-нибудь указать мне на пример реестра динамического ресивера диспетчера тревоги динамически в деятельности? Или объясните, как я это сделаю?
Решение
Как насчет этого?
Intent startIntent = new Intent("WhatEverYouWant");
PendingIntent startPIntent = PendingIntent.getBroadcast(context, 0, startIntent, 0);
AlarmManager alarm = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarm.set(AlarmManager.RTC_WAKEUP, triggerTime, startPIntent);
А потом в вашем Manifest.xml
файл:
<receiver android:name="com.package.YourOnReceiver">
<intent-filter>
<action android:name="WhatEverYouWant" />
</intent-filter>
</receiver>
Так что, насколько я знаю, вы все еще должны объявить приемник в манифесте. Я не уверен, что сможете ли вы установить его в частном случае внутри вашей деятельности. Вы могли бы объявить надежную внутреннюю часть вашей деятельности и позвонить в то, что (если есть интерфейс для широкого пространства. Я не знаю, это делает.)
Другие советы
Начните тревогу намереваться от того, где вы хотите начать тревогу. Напишите ниже код, откуда вы хотите начать слушать будильник
Intent myIntent = new Intent(getBaseContext(), **AlarmReceiver**.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(getBaseContext(), 0, myIntent, 0);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.add(Calendar.MINUTE, shpref.getInt("timeoutint", 30));
alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);
А в широковещательном ресивере написать код, который вы хотите получить. А в мейнкете написать ниже
<receiver android:name=".AlarmReceiver" android:process=":remote"/>
Вы также можете поставить повторяющуюся будильник. Надеюсь, это поможет!