Как вызвать функцию деятельности от диспетчера тревоги

StackOverflow https://stackoverflow.com/questions/9315201

Вопрос

у меня есть 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. Анкет Поскольку вы в любом случае выполняете работу в фоновом режиме, я не вижу причин желания сделать это в деятельности (если, конечно, у вас есть веская причина, которая здесь не показывает).

Смотрите мой ответ здесь Для примера чего -то подобного.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top