Как вызвать функцию деятельности от диспетчера тревоги
-
26-10-2019 - |
Вопрос
у меня есть startApplicationService
Метод в деятельности. Поэтому у меня есть менеджер по сигнализации. startApplicationService
Метод вызывает фоновую службу. Я хочу использовать/вызвать этот метод в onReceive
Метод от моего менеджера по сигнализации. Как это сделать? Помогите мне, пожалуйста. :)
Отредактировано: добавлено класс менеджера по сигнализации:
public class WatcherAlarm extends BroadcastReceiver
{
private final static String LOG_TAG = WatcherAlarm.class.getSimpleName();
private AccessActivity activity = null;
@Override
public void onReceive(Context context, Intent intent)
{
Log.d(LOG_TAG, "-------------------------- WATCHER ALARM ------ ON RECEIVE");
if(activity != null) {
activity.startApplicationService(intent.getExtras());
}
}
public void startAlarm(AccessActivity activity, Bundle bundle)
{
this.activity = activity;
AlarmManager alarmManager = (AlarmManager) activity.getSystemService(Context.ALARM_SERVICE);
Intent i = new Intent(activity, WatcherAlarm.class); // explicit
i.putExtras(bundle);
PendingIntent pi = PendingIntent.getBroadcast(activity, 0, i, 0);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 1000 * 20, pi); // Millisec * Second * Minute
}
public void stopAlarm(Context context)
{
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent i = new Intent(context, WatcherAlarm.class); // explicit
PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0);
alarmManager.cancel(pi);
}
}
И вот мой startApplicationService
Метод: он начинается с Asynctask.
public void startApplicationService(Bundle bundle)
{
try {
task = new ApplicationServiceTask(this);
requestId = task.execute(bundle).get();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
Я пытался получить активность из контекста. Но это невозможно. :(. Есть ли способ сказать call startApplicationService method to activity
от менеджера по сигнализации?
Спасибо за каждый совет.
Zeck
Решение
Нет ... потому что у вас нет гарантии, что деятельность, которую вы пытаетесь звонить, даже существует, когда ваш onReceive()
называется.
То, что вы можете сделать, это начать Activity
используя Intent
с дополнительным, указывающим, что звонящий - это вы BroadcastReceiver
. Анкет Задание может затем проверить это дополнительно и вызвать метод.
Однако, учитывая то, что вы, кажется, хотите сделать. Я бы порекомендовал пойти с Service
. Анкет Поскольку вы в любом случае выполняете работу в фоновом режиме, я не вижу причин желания сделать это в деятельности (если, конечно, у вас есть веская причина, которая здесь не показывает).
Смотрите мой ответ здесь Для примера чего -то подобного.