从不同的活动

问题描述:

检查AlarmIntent我创建重复报警从不同的活动

 Intent intent = new Intent(StartActivity.this, NotificationService.class); 
     intent.setAction(NotificationService.ACTION_PULL_NOTIFICATION); 
     PendingIntent pintent = PendingIntent.getService(getApplicationContext(), 0, intent, 0); 
     AlarmManager alarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
     alarm.setInexactRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), updateFrequency * 1000, pintent); 

这个工程作为迄今为止预期。我检查我的报警是否与此有关

Intent intent = new Intent(StartActivity.this, NotificationService.class); 
    intent.setAction(NotificationService.ACTION_PULL_NOTIFICATION); 
    return (PendingIntent.getBroadcast(getApplicationContext(), ALARM_ID, 
      intent, 
      PendingIntent.FLAG_NO_CREATE) != null); 

这工作正常。当我需要检查是否从其他活动(我的情况是SettingsActivity)设置了警报时,会出现问题。

我无法检查使用第二功能,因为SettingsActivity有“StartActivity.this”无法访问,所以我不能创建相同的意图。

这应该是简单的东西,我希望我错过了什么,但我想设置的意图,所以我可以检查它的报警在不同的活动,但至今没有得到地方的多种方式。我找到了这个答案:Android How to stop AlarmManager in other Activity但它对我也不起作用。

有没有办法做到这一点?

TL; DR:在活动A上创建报警,需要检查它是否在活动B.积极

+0

尝试使用共享偏好。对于e.x.更新一个true然后检查布尔值的地方(在任何活动)你想 – Amsheer 2015-02-05 14:28:50

+0

谢谢,这是一个好主意。不幸的是这并没有解决我的问题,因为我也需要能够取消从SettingsActivity报警,我不能肯定,用户将在SettingsActivity禁用报警后,导航回StartActivity。 – 2015-02-05 14:30:57

+0

我在Android的AlarmManager系统上稍微有些恼火。能有多难是添加和检索基于一个独特的报警标识标签,而不是这个“需要精确,同样意图”废话报警?这看起来对我来说是一种严重缺乏远见的。 – 2015-02-05 14:47:52

我解决它通过使用此代码:

public static boolean isNotificationAlarmSet(Context context, int alarmId){ 
    Intent intent = new Intent(context, NotificationService.class); 
    intent.setAction(NotificationService.ACTION_PULL_NOTIFICATION); 
    return (PendingIntent.getService(context, alarmId, intent, PendingIntent.FLAG_NO_CREATE) != null); 
} 

public static void setNotificationAlarm(Context context, int alarmId, int frequency) { 
    Intent intent = new Intent(context, NotificationService.class); 
    intent.setAction(NotificationService.ACTION_PULL_NOTIFICATION); 
    PendingIntent pintent = PendingIntent.getService(context, alarmId, intent, 0); 
    AlarmManager alarm = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
    alarm.setInexactRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), frequency, pintent); 
} 

public static void removeNotificationAlarm(Context context, int alarmId) { 
    AlarmManager alarm = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
    Intent intent = new Intent(context, NotificationService.class); 
    intent.setAction(NotificationService.ACTION_PULL_NOTIFICATION); 
    PendingIntent p = PendingIntent.getService(context, alarmId, intent, 0); 
    if (p != null) { 
     alarm.cancel(p); 
     p.cancel(); 
    } 
} 

我发现提供的上下文并不重要,你可以使用getApplicationContext();