Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何取消AlarmManager_Android_Alarmmanager - Fatal编程技术网

Android 如何取消AlarmManager

Android 如何取消AlarmManager,android,alarmmanager,Android,Alarmmanager,我已按如下方式设置alarmManager: Intent intent = new Intent(TopActivity.this, RecordActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); intent.putExtra(Utils.KEY_RECORD_TIME, recordLength); intent.putExtra(Utils.KEY_REC_START_TIM

我已按如下方式设置alarmManager:

    Intent intent = new Intent(TopActivity.this, RecordActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
    intent.putExtra(Utils.KEY_RECORD_TIME, recordLength);
    intent.putExtra(Utils.KEY_REC_START_TIME, start);

    saveTimeAndLength(start, recordLength);

    PendingIntent pintent = PendingIntent.getActivity(TopActivity.this, 0, intent, 0);
    AlarmManager alarm = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
    alarm.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pintent);
下面应该取消它,但它总是失败。我错过了什么

 AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(TopActivity.this, RecordActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
intent.putExtra(Utils.KEY_RECORD_TIME, start);
intent.putExtra(Utils.KEY_REC_START_TIME, recordLength);

PendingIntent pintent = PendingIntent.getActivity(TopActivity.this, 0, intent, 0);
try {
    alarmManager.cancel(pintent);
    Log.e(TAG, "Cancelling all pending intents");
} catch (Exception e) {
    Log.e(TAG, "AlarmManager update was not canceled. " + e.toString());
}
我已经阅读了很多关于StackOverflow的答案,但仍然无法找出问题所在。
提前谢谢

您需要创建挂起的意图,然后取消它

AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);

Intent updateServiceIntent = new Intent(context, MyPendingIntentService.class);
PendingIntent pendingUpdateIntent = PendingIntent.getService(context, 0, updateServiceIntent, 0);

// Cancel alarms
try {
    alarmManager.cancel(pendingUpdateIntent);
} catch (Exception e) {
    Log.e(TAG, "AlarmManager update was not canceled. " + e.toString());
}

您需要创建挂起的意图,然后取消它

AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);

Intent updateServiceIntent = new Intent(context, MyPendingIntentService.class);
PendingIntent pendingUpdateIntent = PendingIntent.getService(context, 0, updateServiceIntent, 0);

// Cancel alarms
try {
    alarmManager.cancel(pendingUpdateIntent);
} catch (Exception e) {
    Log.e(TAG, "AlarmManager update was not canceled. " + e.toString());
}

AlarmManager要取消事件,需要比较两种意图

这是通过filterEquals意图的其他方法实现的

确定出于意图的目的,两个意图是否相同 分辨率过滤。也就是说,如果他们的动作、数据、类型、类, 和类别是一样的。这不会比较任何额外数据 包含在意图中

我不知道为什么它在类相同时不匹配

我也有同样的问题,为了克服这个问题,我还设置了一个数据集

看看这是否对你有帮助

编辑

设置警报时

    Intent intent = new Intent(TopActivity.this, RecordActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
    intent.putExtra(Utils.KEY_RECORD_TIME, recordLength);
    intent.putExtra(Utils.KEY_REC_START_TIME, start);
    intent.setData(Uri.fromParts("yourappscheme", "alarm", null)); 
    saveTimeAndLength(start, recordLength);

    PendingIntent pintent = PendingIntent.getActivity(TopActivity.this, 0, intent, 0);
    AlarmManager alarm = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
    alarm.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pintent);
什么时候需要取消

AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(TopActivity.this, RecordActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
intent.putExtra(Utils.KEY_RECORD_TIME, start);
intent.putExtra(Utils.KEY_REC_START_TIME, recordLength);
intent.setData(Uri.fromParts("yourappscheme", "alarm", null)); 

PendingIntent pintent = PendingIntent.getActivity(TopActivity.this, 0, intent, 0);
try {
    alarmManager.cancel(pintent);
    Log.e(TAG, "Cancelling all pending intents");
} catch (Exception e) {
    Log.e(TAG, "AlarmManager update was not canceled. " + e.toString());
}

AlarmManager要取消事件,需要比较两种意图

这是通过filterEquals意图的其他方法实现的

确定出于意图的目的,两个意图是否相同 分辨率过滤。也就是说,如果他们的动作、数据、类型、类, 和类别是一样的。这不会比较任何额外数据 包含在意图中

我不知道为什么它在类相同时不匹配

我也有同样的问题,为了克服这个问题,我还设置了一个数据集

看看这是否对你有帮助

编辑

设置警报时

    Intent intent = new Intent(TopActivity.this, RecordActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
    intent.putExtra(Utils.KEY_RECORD_TIME, recordLength);
    intent.putExtra(Utils.KEY_REC_START_TIME, start);
    intent.setData(Uri.fromParts("yourappscheme", "alarm", null)); 
    saveTimeAndLength(start, recordLength);

    PendingIntent pintent = PendingIntent.getActivity(TopActivity.this, 0, intent, 0);
    AlarmManager alarm = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
    alarm.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pintent);
什么时候需要取消

AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(TopActivity.this, RecordActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
intent.putExtra(Utils.KEY_RECORD_TIME, start);
intent.putExtra(Utils.KEY_REC_START_TIME, recordLength);
intent.setData(Uri.fromParts("yourappscheme", "alarm", null)); 

PendingIntent pintent = PendingIntent.getActivity(TopActivity.this, 0, intent, 0);
try {
    alarmManager.cancel(pintent);
    Log.e(TAG, "Cancelling all pending intents");
} catch (Exception e) {
    Log.e(TAG, "AlarmManager update was not canceled. " + e.toString());
}

我将在这里发布我的答案,希望能帮助其他人节省一些时间。 不知何故,在两侧添加当前的flag pendingent.flag_UPDATE_解决了问题

解决了这个问题。 设定报警

取消警报


我将在这里发布我的答案,希望能帮助其他人节省一些时间。 不知何故,在两侧添加当前的flag pendingent.flag_UPDATE_解决了问题

解决了这个问题。 设定报警

取消警报


我想我也在做同样的事情!我想我也在做同样的事情!你能告诉我你是如何克服你的问题的吗。我所做的一切似乎都不起作用。@Vivek Khandelwal我甚至保存了我在警报中设定的意图并取消了它,但它不起作用。我还没有尝试过你的方法,不知何故添加了flag pendingent.flag_UPDATE_CURRENT解决了我的问题。真奇怪!你能告诉我你是如何克服你的问题的吗。我所做的一切似乎都不起作用。@Vivek Khandelwal我甚至保存了我在警报中设定的意图并取消了它,但它不起作用。我还没有尝试过你的方法,不知何故添加了flag pendingent.flag_UPDATE_CURRENT解决了我的问题。真奇怪!有人已经提到,额外的数据键是反转的开始和记录长度?intent.putextutils.KEY\u RECORD\u TIME,recordLength;intent.putextratils.KEY\u REC\u START\u TIME,START;vs.intent.putExtratils.KEY\u RECORD\u TIME,start;intent.putExtraUtils.KEY\u REC\u START\u TIME,recordLength;-不过,这应该不会造成过滤问题……有人已经提到,额外的数据键是反转的开始和记录长度?intent.putextratils.KEY\u RECORD\u TIME,recordLength;intent.putextratils.KEY\u REC\u START\u TIME,START;vs.intent.putExtratils.KEY\u RECORD\u TIME,start;intent.putExtraUtils.KEY\u REC\u START\u TIME,recordLength;-但它不应该引起过滤问题。。。