我有一个AlarmManager
,每隔10秒通知我一次。一切正常,但由于某种原因,我无法取消警报。这是我的代码。
public class AlarmNotifReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent)
{
//things
}
public void SetAlarm(Context context)
{
AlarmManager am=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent i = new Intent(context, AlarmNotifReceiver.class);
PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0);
am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 10*1000, pi); // Millisec * Second
}
public void CancelAlarm(Context context)
{
Intent i = new Intent(context, AlarmNotifReceiver.class);
PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0);
AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
am.cancel(pi);
}
}
正如预期的那样,我从其他课程中调用这个CancelAlarm()
方法但由于某种原因它不会取消并且一直没有通知我。
注意:SetAlarm()
也可以正常使用。
提前致谢。
答案 0 :(得分:1)
尝试取消Pendingintent--
PendingIntent.getBroadcast(context, 0, intent,
PendingIntent.FLAG_UPDATE_CURRENT).cancel();
希望这有帮助
答案 1 :(得分:1)
应该在相同的待定意图上创建和取消警报。在您的情况下,您将创建待定意图两次。
您的代码应如下所示。
public class AlarmNotifReceiver extends BroadcastReceiver {
PendingIntent pi;
AlarmManager am;
Intent i;
@Override
public void onReceive(Context context, Intent intent) {
pi = PendingIntent.getBroadcast(context, 0, i, 0);
am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
i = new Intent(context, AlarmNotifReceiver.class);
//things
}
public void SetAlarm(Context context) {
am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 10 * 1000, pi);
}
public void CancelAlarm(Context context) {
am.cancel(pi);
}
}
答案 2 :(得分:0)
试试这个
public class AlarmNotifReceiver extends BroadcastReceiver {
AlarmManager am = null;
@Override
public void onReceive(Context context, Intent intent)
{
Intent i = new Intent(context, AlarmNotifReceiver.class);
PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0);
//things
}
public void SetAlarm(Context context)
{
am=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 10*1000, pi); // Millisec * Second
}
public void CancelAlarm(Context context)
{
am.cancel(pi);
}
}
答案 3 :(得分:0)
试试这个。
Android: Get all PendingIntents set with AlarmManager
要取消所有警报,首先您必须找到所有待处理的意图并使用该警告取消警报。
如果它对您有帮助,请不要错过接受此作为您的答案。
答案 4 :(得分:0)
您的问题是您正在创建新意图而不是取消现有意图。函数SetAlarm应将intent放入“global”变量,而CancelAlarm函数应该只调用 am.cancel(global_pi);
上述服务对我有用,但是:
如果这是不可能的(因为那是接收器),请尝试首先使用(新)意图设置新警报。