Codenameone LocationUpdate回调在ios设备上未被命中,但在Android和Javascript上被命中

Codenameone LocationUpdate回调在ios设备上未被命中,但在Android和Javascript上被命中,codenameone,Codenameone,我的问题是关于Codenameone API中的LocationRequest.setLocationListener方法。我正在尝试设置一个地图屏幕,允许用户点击一个按钮来启用GPS监控(并最终将GPS数据写入数据库,但这与现在无关)。我在这里找到了一些基本的样板代码: 然后,我对它进行了轻微的修改,使手机在每次位置更新时都能震动(这样我就可以在街区里走动,并得到即时反馈,表明它按预期工作)。我就这么做了,我发现Android设备工作得很好,而我的iPhone却不是。它会得到一次位置,然后再也

我的问题是关于Codenameone API中的LocationRequest.setLocationListener方法。我正在尝试设置一个地图屏幕,允许用户点击一个按钮来启用GPS监控(并最终将GPS数据写入数据库,但这与现在无关)。我在这里找到了一些基本的样板代码:

然后,我对它进行了轻微的修改,使手机在每次位置更新时都能震动(这样我就可以在街区里走动,并得到即时反馈,表明它按预期工作)。我就这么做了,我发现Android设备工作得很好,而我的iPhone却不是。它会得到一次位置,然后再也不会得到。这是我的密码:

Form hi=新表单(“本机地图测试”);
hi.setLayout(newborderlayout());
cnt=新的映射容器();
hi.addCommand(新命令(“跟踪”){
已执行的公共无效操作(操作事件ev){
最终InfiniteProgress ip=新的InfiniteProgress();
dlg=ip.showinifiteblock();
LocationManager l=LocationManager.getLocationManager();
LocationRequest LocationRequest=新的LocationRequest(LocationRequest.PRIORITY\u HIGH\u ACCUARCY,2000);l.setLocationListener(新的LocationListener(){public void LocationUpdate(位置
位置){
if(Display.getInstance().getCurrent()==dlg){
dlg.dispose();
}
Display.getInstance().vibrate(1);
}
public void providerStateChanged(int newState){
if(Display.getInstance().getCurrent()==dlg){
dlg.dispose();
}
}
},地点要求);
}

});
确保您已将ios.locationUsageDescription设置为有效值,没有该位置将无法在ios上工作。

确保您已将ios.locationUsageDescription设置为有效值,没有该位置将无法在ios上工作。

我感觉我已经尝试了所有方法,但无法在ios上工作。我已经开始研究创建自己的后台位置管理器的方法,以便经常“强制”位置请求。我看到CN1有一个后台提取功能。我简单地处理了一下这个问题,它似乎很好地满足了我的需要。我的想法是,只要按下一个按钮,我就会启用一个前台线程,该线程每x秒循环一次并检索位置(然后在地图上画线/更新数据库)。如果应用程序暂停/最小化,线程将停止,后台提取将接管检索位置更新和写入数据库的责任。当应用程序恢复时,后台抓取程序将停止,前台线程将再次启动。在这些概念方面有经验的人认为这个想法有什么明显的错误吗?我希望后台抓取可以达到两个目的——让我能够解决iOS上LocationUpdate回调的问题,并确保不管操作系统是否在后台垃圾收集应用程序,都能进行GPS跟踪。我知道这可能会对电池造成压力,但我同意这一点,因为该应用程序是如何为追踪丢失的宠物而构建的,在这种情况下,我觉得这是一个用户更容易接受的技术问题。

嗯,我觉得我已经尝试了所有方法,但就是无法在iOS上运行。我已经开始研究创建自己的后台位置管理器的方法,以便经常“强制”位置请求。我看到CN1有一个后台提取功能。我简单地处理了一下这个问题,它似乎很好地满足了我的需要。我的想法是,只要按下一个按钮,我就会启用一个前台线程,该线程每x秒循环一次并检索位置(然后在地图上画线/更新数据库)。如果应用程序暂停/最小化,线程将停止,后台提取将接管检索位置更新和写入数据库的责任。当应用程序恢复时,后台抓取程序将停止,前台线程将再次启动。在这些概念方面有经验的人认为这个想法有什么明显的错误吗?我希望后台抓取可以达到两个目的——让我能够解决iOS上LocationUpdate回调的问题,并确保不管操作系统是否在后台垃圾收集应用程序,都能进行GPS跟踪。我知道这可能会对电池造成压力,但鉴于该应用程序是如何为追踪丢失的宠物而开发的,我同意这一点,在这种情况下,我觉得这是一个用户更容易接受的技术问题。

嗨,谢了回复。确实设置了ios.locationUsageDescription构建提示。我相信当我使用CN1向导导入MapsAPI时,它添加了所有相关的构建提示。下面是我的构建提示的图像,它们现在就存在:我注意到您使用了vibrate(1),这在iOS上可能不明显。你尝试过其他形式的通知吗?嗨,Shai,使用vibrate(1),我在iOS上得到了一个振动,所以我相信它确实起作用了。不过,为了确保这一点,我尝试了一些不同的方法,例如使用更大的振动设置,并在每个locationUpdated回调上放大地图。在任何情况下,它都会第一次起作用,但不会再起作用。嗨,谢了,谢谢你的回复。确实设置了ios.locationUsageDescription构建提示。我相信当我使用CN1向导导入MapsAPI时,它添加了所有相关的构建提示。下面是我的构建提示的图像,它们现在就存在:我注意到您使用了vibrate(1),这在iOS上可能不明显。你尝试过其他形式的通知吗?嗨,Shai,使用vibrate(1),我在iOS上得到了一个振动,所以我相信它确实起作用了。不过,为了确保这一点,我尝试了一些不同的方法,例如使用更大的振动设置,并在每个locationUpdated回调上放大地图。在所有情况下,它第一次起作用,但之后不起作用