4

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

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

请帮忙。

4

4 回答 4

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.

于 2011-05-09T14:57:22.070 回答
0

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

于 2011-05-09T14:50:42.940 回答
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

于 2011-05-09T15:02:23.243 回答
0

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

 am_mngr.cancel(pndngInt); // this will cancel the previous servicse...
于 2012-12-18T03:17:12.690 回答