Android如何在其他Activity中停止AlarmManager

时间:2014-11-19 11:05:40

标签: android service alarmmanager

我正在使用一个在AlarmManager重复创建的Activity'A'中调用的服务。我的服务是反复检查服务器的响应,当响应为真时,启动新的活动B.现在,当活动B启动时,我想要停止服务以及AlarmManager。我怎么能这样做?

我的'A'呼叫服务活动代码如下

    Calendar cal = Calendar.getInstance();
    cal.add(Calendar.SECOND, 40);

    Intent intent = new Intent(this, response.class);

    // Add extras to the bundle
    intent.putExtra("foo", "bar");
    // Start the service
    // startService(intent);

    pintent = PendingIntent.getService(this, 0, intent, 0);

    alarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
    int i;
    i = 15;
    alarm.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(),
            i * 1000, pintent);

    startService(intent);

我还在Activity'B'中尝试了这段代码片段来停止AlarmManager但是失败了

      Intent sintent = new Intent(this, response.class);
     pintent = PendingIntent.getService(this, 0, sintent, 0);
     alarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
     stopService(sintent);
     alarm.cancel(pintent);

1 个答案:

答案 0 :(得分:2)

在活动B中,您应该使用与在活动A中创建的上下文相同的上下文创建sIntent。

所以在活动A中我会添加这个

private static Context context;

public static Context getAppContext(){
    return ActivityA.context;
}

和Activity A的onCreate()方法,初始化上下文

context=getApplicationContext();

在活动B中创建sIntent,如下所示:

Intent intent = new Intent(ActivityA.getAppContext(), ServiceClass.class);
intent.putExtra("fsasf", "bar");
PendingIntent pintent = PendingIntent.getService(this, 0, intent, 0);
AlarmManager alarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
stopService(intent);
alarm.cancel(pintent);