从lastKnownLocation()获取经度和纬度?

时间:2020-07-17 12:25:33

标签: java android location

我有一个活动onCreate,它计算您的位置和附近的事件之间的距离,我使用了lastKnownLocation来获取当前设备的位置并将其标记在Google地图上,但是我需要它在用于计算距离的方法之外编写经度和纬度。

我已经使用LocationManager来获取粗略的坐标,但是这些坐标不够准确,距离甚至不到半英里的东西都有50英里的距离。我目前拥有它,因此将覆盖从LocationManager获得的经度和纬度,但不会。

我也尝试过使用LocationRequest,但这并没有帮助。

                    LocationRequest locationRequest = LocationRequest.create();
                    locationRequest.setInterval(60000);
                    locationRequest.setFastestInterval(5000);
                    locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
                    LocationCallback locationCallback = new LocationCallback() {
                        @Override
                        public void onLocationResult(LocationResult locationResult){
                            if(locationRequest==null){
                                return;
                            }
                            for(Location location : locationResult.getLocations()) {
                                if (location != null){
                                    userLat=location.getLatitude();
                                    userLng=location.getLongitude();
                                }
                            }
                        }
                    };

                    LocationServices.getFusedLocationProviderClient(EventLocator.this).requestLocationUpdates(locationRequest,locationCallback, null);

                    LocationServices.getFusedLocationProviderClient(EventLocator.this).getLastLocation().addOnSuccessListener(new OnSuccessListener<Location>() {

                        @Override
                        public void onSuccess(Location location) {
                            if(location!=null){
                                double longitude=location.getLongitude();
                                double latitude=location.getLatitude();
                                userLng=longitude;
                                userLat=latitude;
                            }
                        }
                    });

所有权限都是正确的,正如我所说的,我已经使用getLastLocation()放置标记。

4 个答案:

答案 0 :(得分:0)

您可以创建接口并在需要计算距离的类中实现它

答案 1 :(得分:0)

通常,GPS需要一些时间来预热。您的初始位置读数可能来自冷GPS 。为了获得更准确的读数,请继续阅读结果,直到获得适合您的准确读数为止。

请记住,手机上的GPS不太准确,并且无法建筑物内部获得准确的读数,或者如果您所在区域的覆盖范围不够,时间。

最后知道的职位不会给您当前的职位,就像它说的那样,这是最后几分钟知道的最新职位。同样,它可能来自手机信号塔读取而不是GPS读取。

答案 2 :(得分:0)

我正在使用此代码

lateinit var fusedLocationProviderClient: FusedLocationProviderClient
lateinit var latitude : Double
lateinit var longitude : Double

    override fun onCreate() {
        super.onCreate()
        fusedLocationProviderClient = FusedLocationProviderClient(this)
        updateLocationTracking()
    }

    @SuppressLint("MissingPermission")
    private fun updateLocationTracking() {
            if(PermissionUtility.isPermissionsGranted(this, Manifest.permission.ACCESS_FINE_LOCATION)) {
                val request = LocationRequest().apply {
                    interval = LOCATION_UPDATE_INTERVAL
                    fastestInterval = FASTEST_LOCATION_INTERVAL
                    priority = PRIORITY_HIGH_ACCURACY
                }
                fusedLocationProviderClient.requestLocationUpdates(
                    request,
                    locationCallback,
                    Looper.getMainLooper()
                )
            } 
    }

    private val locationCallback = object : LocationCallback() {
        override fun onLocationResult(result: LocationResult?) {
            super.onLocationResult(result)
                result?.locations?.let { locations ->
                    for(location in locations) {
                        setLocationData(location)
                    }
                }
        }
   }

    private fun setLocationData(location : Location){
        latitude = location.latitude
longitude = location.longitude

    }

 
}

答案 3 :(得分:0)

所以我弄清楚了当我无法使用用于调试的电话并使用个人电话进行测试时,继续进行活动并且距离是正确的。

在调试电话设置以及使用GPS_PROVIDER和NETWORK_PROVIDER时都遇到了麻烦,当我的电话仅使用GPS来获取位置时,却什么也没有。其他电话可以,所以可以肯定地说我的调试电话的GPS异常。 这是一台旧手机,当我买到一部新手机时,我将其恢复出厂设置以进行调试,因为它有助于向后兼容旧手机和较小的屏幕。我从没想过重置后实际的硬件是否也有问题。

所以错误在于手机本身而不是应用程序。猜猜它表明有两个要测试的设备。