Как остановить AlarmManager - PullRequest
4 голосов
/ 09 мая 2011

У меня есть действие A, оно регистрирует AlarmManager для запуска другого BroadcastReceiver B. Когда время достигнуто, вызывается onReceive () из B и запускается другое действие C. A может быть закрыто при запуске C.

Моя проблема: - C не знает pendingIntent в A, как я могу вызвать alarmManager.cancel (pendingIntent) в C? - Или как я могу передать pendingIntent от A до B на C?

Пожалуйста, помогите.

Ответы [ 4 ]

2 голосов
/ 09 мая 2011

В своем приложении я создал статический метод, который возвращает PendingIntent, необходимый для AlarmManager, и затем я могу вызвать его из любого класса. Если у вас есть PendingIntent, который не меняется между вызовами, это может помочь вам. Например, у меня есть:

public static PendingIntent getSyncPendingIntent(Context context)
    {
        Intent i = new Intent(context, <classname>.class);
        PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0);
        return pi;  
    }

И я могу просто позвонить из любого класса, чтобы получить тот же PendingIntent.

0 голосов
/ 18 декабря 2012

Чтобы отменить / уничтожить все службы, которые вы сгенерировали, обычно вам нужна та же переменная pendingInetent и AlarmManager, которую вы использовали для запуска этих служб, например, если вашей предыдущей переменной является am_mngr и pndngInt, используйте ее в своем методе stopservice следующим образом:

 am_mngr.cancel(pndngInt); // this will cancel the previous servicse...
0 голосов
/ 09 мая 2011

Вы можете зарегистрировать приемник вещания в A, чтобы прослушать пользовательское действие, которое транслируется при запуске C

В Деятельности A

private BroadcastReceiver onActivityCStartedReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        //cancel the pendingIntent for the alarm here
    }
};

зарегистрировать получателя

registerReceiver(onActivityCStartedReceiver , new IntentFilter(ACTIVITY_C_STARTED_ACTION));

В действии C звоните

Intent i = new Intent(ACTIVITY_C_STARTED_ACTION);
context.sendBroadcast(i);

попробуй! используйте систему сообщений для вашего блага: D

0 голосов
/ 09 мая 2011

Было бы намного проще управлять тревогой и ее намерением в одноэлементной службе, чем пытаться передать ее от действия к действию, и это было бы гораздо менее хрупко (вы могли бы ввести действие D где-то посередине, не цепляя последовательнонамерение дальше).

...