代号一个应用程序不提供真实位置

Posted

技术标签:

【中文标题】代号一个应用程序不提供真实位置【英文标题】:Codename One app not provide real location 【发布时间】:2020-08-07 18:21:16 【问题描述】:

在应用程序中,我们有一个模块,您可以在其中发送带有 GPS 位置的时间记录。

在 40% 的情况下,我们会遇到位置问题,因为模块提供了一个不真实的位置(有时大约 1 公里)。

当我们遇到这种情况时,我们打开 Google 地图应用程序,它会为我们提供完美的位置,然后再打开应用程序和非真实位置。

我们使用这个来获取位置:

Slider s1 = new Slider();
Dialog dlg = makeDialog("HIGH PRECISION LOCATION...", s1, null, 'a');
dlg.addShowListener((ActionListener) e -> 

    LocationManager locationManager = LocationManager.getLocationManager();                
    locationManager.setLocationListener(this, new LocationRequest(LocationRequest.PRIORITY_HIGH_ACCUARCY, 500));

    loc = locationManager.getCurrentLocationSync(20000);

    dlg.dispose();
    if(loc == null) 
        Slider s2 = new Slider();
        Dialog dlg2 = makeDialog("GETTING LAST KNOWN LOCATION...", s2, "OK", 'a');
        dlg2.addShowListener((ActionListener) e2 -> 
            loc = locationManager.getLastKnownLocation();

            if(loc == null) 
                // location not found
                Dialog.show("Attenzione!", "Posizione non trovata. E' consigliato di spostarsi all'aperto. "
                        + "Tuttavia è possibile inviare la timbratura anche senza coordinate.", "Ok", null);
             else 
                paintLocation(loc, GPSStateOn);
            
        );
        dlg2.show();
     else 
        paintLocation(loc, GPSStateOn);
    

);
dlg.show();

-

@Override
public void locationUpdated(final Location location) 

    switch (LocationManager.getLocationManager().getStatus()) 
        case LocationManager.AVAILABLE:
            GPSStateOn = true;
            break;
        case LocationManager.OUT_OF_SERVICE:
            GPSStateOn = false;
            break;                
        case LocationManager.TEMPORARILY_UNAVAILABLE:
            GPSStateOn = false;                 
            break;                
    

    if(loc != null) 
        paintLocation(loc,GPSStateOn);
        System.out.println("-----LATITUDINE: " + loc.getLatitude());
        System.out.println("-----LONGITUDINE: " + loc.getLongitude());
    

我们还添加了构建提示android.playService.location = true


添加于 2020 年 4 月 25 日 11:58 我忘了说大约 40% 的案例会到达“获取最后一个已知位置...”,然后给出完美的真实位置。 Android 构建提示:

最后一个被剪掉了……值是:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/><uses-feature         android:glEsVersion="0x00020000"         android:required="true"/><uses-permission android:name="android.permission.CAMERA"/><uses-feature android:name="android.hardware.camera" android:required="false"/>


添加 06/05/2020 10:48

也许这会很有用: 我注意到当位置需要很多时,顶部栏中没有显示 GPS 图标

当它花费更少的时间时,GPS 图标是可见的

【问题讨论】:

这听起来就像缺少android.playService.location 问题。请检查 codenameone_settings.properties 中的拼写是否正确。如果是,请列出您拥有的所有 android.* 构建提示。 @ShaiAlmog 我编辑了添加 Android 构建提示的原始问题(请参阅“添加 25/04/2020 11:58 部分”) 你查看codenameone_settings.properties了吗?在那里更容易看到拼写错误的条目。 我不知道我要寻找什么。我的codenameone_settings.properties:pastebin.com/raw/xQ04qgVQ 【参考方案1】:

再次查看代码,我注意到您使用了 set location listener 和 getCurrentLocationSync,在这种情况下它们是互斥的。你需要选择一个。如果你给前者(这是首选方式)足够的时间来工作,它应该会给你一个准确的位置。请注意,GPS 位置有时需要几秒钟才能进行初始读数。

【讨论】:

我已经尝试设置监听器...有时需要超过 30 秒,当仍在加载时我关闭应用程序,然后我再次启动它,瞧:完美位置在 2 秒内 但我不能告诉客户重启应用,谷歌地图总是最多需要 2 秒 这种情况是否只发生在您的设备或其他设备上?您确定从未调用过侦听器回调吗? 是的,因为在回调中我处理了一个加载对话框......而且它永远不会被处理 或者回调被调用得太快以至于对话框还没有时间完全显示

以上是关于代号一个应用程序不提供真实位置的主要内容,如果未能解决你的问题,请参考以下文章

eplan,如何让中断点关联只显示高层代号,不显示位置代号?

代号一 模拟位置权限增加了,怎么去掉?

Android 位置未在真实设备中显示

如何在真实设备中模拟驾驶路线

在 Android 中找不到位置提供程序

代号为 iOS 的第一个问题恶魔二进制文件