Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/405.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
Java Android本地通知Cordova:等待cancelAll完成_Java_Javascript_Android_Cordova - Fatal编程技术网

Java Android本地通知Cordova:等待cancelAll完成

Java Android本地通知Cordova:等待cancelAll完成,java,javascript,android,cordova,Java,Javascript,Android,Cordova,我有Cordova应用程序,带有本地通知插件。问题是cancelAll()并没有等到它完成,所以在我添加新邮件时它仍在删除 如何同步线程以使cancelAll()等待 一些相关代码AlarmHelper::cancelAll() /** *@请参阅LocalNotification#cancelAllNotifications() */ 公共布尔值cancelAll(SharedReferences报警设置){ 最终映射allAlarms=alarmSettings.getAll(); 最终设置

我有Cordova应用程序,带有本地通知插件。问题是
cancelAll()
并没有等到它完成,所以在我添加新邮件时它仍在删除

如何同步线程以使
cancelAll()
等待

一些相关代码
AlarmHelper::cancelAll()

/**
*@请参阅LocalNotification#cancelAllNotifications()
*/
公共布尔值cancelAll(SharedReferences报警设置){
最终映射allAlarms=alarmSettings.getAll();
最终设置alarmIds=allAlarms.keySet();
用于(字符串alarmId:alarmId){
Log.d(LocalNotification.PLUGIN_名称,“取消id为“+alarmId”的通知);
字符串alarmInt=alarmId;
取消报警(报警点);
}
返回true;
}
如何同步线程以使cancelAll()等待

你不能
cancelAll()
是异步的

问题是cancelAll()并没有等到它完成,所以在我添加新邮件时它仍然在删除

首先为什么要调用
cancelAll()
?及时更新您的通知


此外,请不要有多个通知,因为这被认为是糟糕的形式。对所有未完成的“消息”有一个通知,当用户对这些“消息”采取行动(例如,访问收件箱)时,该通知将被清除。

只有一条或两条消息显示给用户,其他消息将在将来显示。有时,这些未来的日期会发生变化,需要删除。从JavaScript中,我无法访问真正的列表,所以我更容易删除并重新创建它们。无论如何,我认为这是不可能的。在xcode中,很容易解决一个问题。@PiTheNumber:“无论如何,我不认为这是不可能的”——你也可以相信世界是平的。通知是在操作系统进程中处理的,与显示或删除通知的请求是异步的,除了创建自己的Android版本之外,您所能做的任何事情都不会改变这一点。您可以同步资源访问的多线程语言实际上没有意义。是的,资源由操作系统处理,但我可以同步我的层。类似于或可能有效的东西…@PiTheNumber:“我可以同步我的图层”--不会以任何方式解决您的问题。您写道“当我添加新邮件时,它仍在删除”。“删除”是由另一个进程完成的,你无法与该进程的工作同步任何内容,除非你在自己的ROM mod上通过自己版本的Android重写该进程。不,我可以从日志中看出,正在运行的是我的代码(上面发布的)。我只需要同步
AlarmHelper::addAlarm()
,等待
AlarmHelper::cancelAll()
完成即可。
/**
 * @see LocalNotification#cancelAllNotifications()
 */
public boolean cancelAll(SharedPreferences alarmSettings) {
    final Map<String, ?> allAlarms = alarmSettings.getAll();
    final Set<String> alarmIds = allAlarms.keySet();

    for (String alarmId : alarmIds) {
        Log.d(LocalNotification.PLUGIN_NAME, "Canceling notification with id: " + alarmId);
        String alarmInt = alarmId;
        cancelAlarm(alarmInt);
    }

    return true;
}