phonegap android本地通知取消全部无法正常工作

时间:2012-12-04 06:02:55

标签: android cordova localnotification

嗨我在我的android项目中使用phonegap本地通知插件。 通知工作得很好。 我可以删除带ID的通知 但在我的应用程序中,我必须删除所有通知选项,此插件为此提供了取消所有通知的方法。 这是: -

    plugins.localNotification.cancelAll();

但这不起作用。 我在这里使用这个插件 https://github.com/phonegap/phonegap-plugins/tree/master/Android/LocalNotification 任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

我认为这可能就是这个问题的答案。正如它在cancelAllNotifications()方法(LocalNotification.java第124行)的描述中所述:

  

Android只能取消注册特定的闹钟。没有取消所有的东西。因此我们依赖共享首选项来保存所有警报,以循环显示这些警报并逐个取消注册。

但是,看一下调用cancelAllNotifications()方法的代码(第59行):

} else if (action.equalsIgnoreCase("cancelall")) {
    unpersistAlarmAll();
    return this.cancelAllNotifications();
}

以下是unpersistAlarmAll()的样子(第181行):

private boolean unpersistAlarmAll() {
final Editor alarmSettingsEditor = this.cordova.getActivity().getSharedPreferences(PLUGIN_NAME, Context.MODE_PRIVATE).edit();

alarmSettingsEditor.clear();

return alarmSettingsEditor.commit();
}

正在发生的事情是,在调用 cancelAllNotifications()之前,通过sharedPreferences 清除alarmIds,实际上不会取消任何警报。

我不确定将呼叫转移到unpersistAlarmAll()的最佳位置在哪里,我很乐意得到一些建议。与此同时,在cancelAllNotifications()返回的结果经过测试(第133行)之后,我已将其移至alarm.cancelAll(alarmSettings)内,如下所示:

if (result) {
    unpersistAlarmAll();
    return new PluginResult(PluginResult.Status.OK);

到目前为止,这似乎工作正常。也许另一种方法是废弃整个unpersistAlarmAll()方法,而是在每个单独的警报成功取消后调用unpersistAlarm(String alarmId)(第168行)。

答案 1 :(得分:0)

根据您要执行的操作,您可以使用“状态栏通知”。这个插件可以让你把消息放在android状态栏上。

https://github.com/phonegap/phonegap-plugins/tree/master/Android/StatusBarNotification