【问题标题】:onLocationChanged() not being calledonLocationChanged() 没有被调用
【发布时间】:2023-03-07 16:28:01
【问题描述】:

我知道有人问过这个问题,但我无法解决。

此代码继续到请求位置部分。我知道现在的设置是不好的选择,但我只是想得到结果,我现在并不担心手机电池。我可以在 Eclipse 调试器中看到

"libloc" - "Latitude: XXXXX"    
"libloc" - "Longitude: XXXX"    
"libloc" - "Accuracy: 27000"

这意味着 GPS 正在工作。但我无法获得实际位置,因为LocationListener 中的任何方法都没有触发。

    LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

    Location loc = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
    if(loc==null){      
        String provider = null;
        
        if ( lm.isProviderEnabled( LocationManager.GPS_PROVIDER ) ) {
            provider = LocationManager.GPS_PROVIDER;
        } else {
            Toast.makeText(this, "GPS not available", 3000).show();
            if(lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {
                provider = LocationManager.NETWORK_PROVIDER;
            } else {
                Toast.makeText(this, "Provider Not available", 3000).show();
            }
        }
        
        if(provider != null) {
            lm.requestLocationUpdates(provider, 0, 0, locationListener);
        }
        
    } else {
        Latitude = loc.getLatitude();
        Longitude = loc.getLongitude();
    }

这是我的 Location Listener 对象,声明在顶部代码下方。 没有调用这些方法(因此使用 Log.d 函数,以便我可以添加断点,但在此侦听器中没有调用任何内容)。

double Latitude         = 0.0;
double Longitude        = 0.0;

LocationListener locationListener = new LocationListener(){
    
    @Override
    public void onLocationChanged(Location location) {
        Latitude = location.getLatitude();
        Longitude = location.getLongitude();
    }

    @Override
    public void onProviderDisabled(String provider) { Log.d("GPS", "HEY THERE"); }
    @Override
    public void onProviderEnabled(String provider) { Log.d("GPS", "HEY THERE"); }       
    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
        Log.d("GPS", "HEY THERE");
        
    }

};

其他信息,来自 cmets:

事实并非如此。位置 = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);总是 返回空值。 – Overload119 50 分钟前

当您单步执行 IF 中的其余代码时会发生什么 陈述? – 杰克 44 分钟前

我最终到达了这一行:lm.requestLocationUpdates(provider, 0, 0、位置监听器);然后在调试器控制台消息中我可以看到 纬度、经度、精度显示——以及它的反复显示, 所以我假设 GPS 已被激活并且它正在获取 地点。问题是 locationListener 没有触发它的任何 方法。 – Overload119 41 分钟前

我查看了链接,我的代码是一样的。 – Overload119 41 分钟 以前 那个时候提供者的价值是什么? – 杰克 30 分钟 以前

提供者的值为“gps” – Overload119 15 分钟前
能 您在 onLocationChanged 中设置了一些断点以查看何时/是否 开火?如果您已经这样做了,在运行您的应用程序之后 注册监听器后可能需要几秒钟 火。移动你的手机并等待。在某些时候它应该 反复开火。 – 杰克 12 分钟前

imm.io/8vXb 这是截图 -- 调试器显示 GPS 正在工作(注意这个事件 一遍又一遍地弹出)。我已经有了断点 onLocationChanged() - 即使在等待一个 延长的时间。它返回的纬度/经度总是 也一样。 – Overload119 39 秒前编辑

我也试过打电话 lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);通过一个按钮, 并在控制台消息显示纬度/经度后单击它 收到了。 -- 虽然该方法返回的位置为空。 – Overload119 0 秒前编辑

【问题讨论】:

  • 解决了吗?同样的问题!好像我们都回收了同一个代码sn-p,这是不对的。
  • @Overload119,天哪!我得到了和你在这里一样的情况。那么解决方案如何?

标签: android gps location


【解决方案1】:

我猜你的Location loc 总是由getLastKnownLocation() 设置,因此你的if 语句永远不会计算为true。你有没有调试看看到底发生了什么:

Location loc = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
    if(loc==null){ ... }

?

据我了解,您应该只使用getLastKnownLocation() 来获取初始位置,然后注册您的侦听器以进行跟踪。

Here 是一个很好的链接,包含您需要的所有信息。

【讨论】:

  • 事实并非如此。 loc = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);总是返回 null。
  • 在 IF 语句中单步执行其余代码时会发生什么?
  • 我最终到达了这一行:lm.requestLocationUpdates(provider, 0, 0, locationListener);然后在调试器控制台消息中,我可以看到纬度、经度、精度显示 - 以及它的重复显示,所以我假设 GPS 已被激活并获取位置。问题是 locationListener 没有触发它的任何方法。
  • 提供者的值为“gps”
  • 你能在 onLocationChanged 中设置一些断点来查看它何时/是否触发吗?如果您已经这样做了,在运行您的应用程序后,注册监听器后可能需要几秒钟才能触发它。移动你的手机并等待。在某些时候,它应该会反复触发。
猜你喜欢
  • 1970-01-01
  • 2017-05-14
  • 2015-10-10
  • 2016-09-18
  • 1970-01-01
  • 2019-02-07
  • 1970-01-01
  • 2016-11-14
  • 1970-01-01
相关资源
最近更新 更多