1

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

    plugins.localNotification.cancelAll();

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

4

2 回答 2

2

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

Android 只能取消注册特定警报。没有cancelAll这样的东西。因此,我们依靠保存所有警报的 Shared Preferences 来遍历这些警报并一一取消注册。

但是,请看一下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();
}

发生的事情是在调用之前 从 sharedPreferences 中清除了alarmIds cancelAllNotifications(),实际上没有留下要取消的警报。

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

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

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

于 2012-12-26T17:06:23.020 回答
0

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

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

于 2012-12-04T16:37:50.447 回答