如何停止AlarmManager

时间:2011-05-09 14:32:11

标签: android alarmmanager android-pendingintent

我有一个活动A,它注册AlarmManager以触发另一个BroadcastReceiver B.当达到时间时,将调用B的onReceive(),并启动另一个活动C.当C启动时,A可能会被关闭。

我的问题是: - C不知道A中的pendingIntent,如何在C中调用alarmManager.cancel(pendingIntent)? - 或者,如何将pendingIntent从A传递到B到C?

请帮助。

4 个答案:

答案 0 :(得分:2)

在我的应用程序中,我创建了一个静态方法,返回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

答案 1 :(得分:0)

在单例服务中管理警报及其意图比尝试将其从活动传递到活动要容易得多,而且不那么脆弱(你可以在中间的某个地方引入Activity D而不必菊花链式意图进一步)。

答案 2 :(得分:0)

您可以在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

答案 3 :(得分:0)

要取消/销毁您生成的所有服务,通常需要使用相同的“pendingInetent”和“AlarmManager”变量来启动这些服务,  例如,如果你以前的变量是am_mngr和pndngInt,那么在你的stopservice方法中使用它就像这样。

 am_mngr.cancel(pndngInt); // this will cancel the previous servicse...