从不同的活动
问题描述:
检查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.积极
答
我解决它通过使用此代码:
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();
尝试使用共享偏好。对于e.x.更新一个true然后检查布尔值的地方(在任何活动)你想 – Amsheer 2015-02-05 14:28:50
谢谢,这是一个好主意。不幸的是这并没有解决我的问题,因为我也需要能够取消从SettingsActivity报警,我不能肯定,用户将在SettingsActivity禁用报警后,导航回StartActivity。 – 2015-02-05 14:30:57
我在Android的AlarmManager系统上稍微有些恼火。能有多难是添加和检索基于一个独特的报警标识标签,而不是这个“需要精确,同样意图”废话报警?这看起来对我来说是一种严重缺乏远见的。 – 2015-02-05 14:47:52