我的问题是关于Codenameone API中的LocationRequest.setLocationListener方法。我试图设置一个地图屏幕,允许用户点击按钮启用GPS监控(最终将GPS数据写入数据库,但现在这无关紧要)。我在这里找到了一些基本的样板代码:https://www.codenameone.com/blog/mapping-natively.html
然后我稍微修改它以使手机每次进行位置更新时都会振动(这样我就可以在块周围走动并获得它按预期工作的即时反馈)。我做到了这一点,我发现Android设备运行正常,但我的iPhone却没有。它将获得该位置一次,然后再也不会。这是我的代码:
Form hi = new Form("Native Maps Test");
hi.setLayout(new BorderLayout());
cnt = new MapContainer();
hi.addCommand(new Command("Track") {
public void actionPerformed(ActionEvent ev) {
final InfiniteProgress ip = new InfiniteProgress();
dlg = ip.showInifiniteBlocking();
LocationManager l = LocationManager.getLocationManager();
LocationRequest locationRequest = new LocationRequest(LocationRequest.PRIORITY_HIGH_ACCUARCY, 2000); l.setLocationListener(new LocationListener() { public void locationUpdated(Location
location) {
if (Display.getInstance().getCurrent() == dlg) {
dlg.dispose();
}
Display.getInstance().vibrate(1);
}
public void providerStateChanged(int newState) {
if (Display.getInstance().getCurrent() == dlg) {
dlg.dispose();
}
}
}, locationRequest);
}
});

请注意" dlg"东西可能是无关紧要的,我只是从上面提到的URL中抓住了它。
希望有这方面经验的人可以帮助我!
干杯, 斯科特
答案 0 :(得分:0)
确保您已将ios.locationUsageDescription
设置为有效值,而{I}} {}不会在iOS上运行。
答案 1 :(得分:0)
好吧,我觉得我已经尝试了所有的东西但是却无法在iOS上运行。我已经开始研究创建自己的后台位置管理器的方法,以便经常“强制”定位位置请求。我看到CN1有一个后台提取功能。我简单地玩了一下它似乎很好地满足了我的需要。我的想法是,按下按钮,我将启用一个前景线程,每隔x秒循环并检索位置(然后绘制线到地图/更新数据库)。如果应用程序暂停/最小化,则线程将停止,后台获取将负责检索位置更新并写入数据库。当应用程序恢复时,后台提取程序将停止,前台线程将再次启动。有这些概念经验的人是否看到了这个想法的明显错误?我希望背景提取有两个目的 - 让我能够解决我在iOS上使用locationUpdated回调看到的问题,并确保无论操作系统垃圾是否在后台收集应用程序,都会发生GPS跟踪。我知道这可能会给电池带来压力,但我很清楚看到应用程序是如何构建用于跟踪丢失的宠物的,在这种情况下我觉得这是一个技术问题,用户会更多很容易接受。