繁体   English   中英

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

[英]Getting longitude and latitude from lastKnownLocation()?

我有一个 onCreate 活动,它计算您的位置和附近的事件之间的距离,我使用 lastKnownLocation 来获取当前设备位置并将它的标记放在谷歌 map 上,但我需要它在计算距离的方法之外写出经度和纬度。

我已经使用 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() 来放置标记。

  1. 确保您在清单文件中添加了位置权限

  2. 如果您使用的是 android os 6 以上,请确保您有定位权限

  3. 确保您的手机中启用了 GPS 服务

    公共位置 getLocation() { LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
    如果(位置管理器!= null){
    位置 lastKnownLocationGPS = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); if (lastKnownLocationGPS != null) {
    返回最后一个已知位置GPS; } 别的 {
    位置 loc = locationManager.getLastKnownLocation(LocationManager.PASSIVE_PROVIDER); System.out.println("1::"+loc);----在这里获取null System.out.println("2::"+loc.getLatitude()); 返回地址; } } 别的 {
    返回 null; } }

如果仍然无法正常工作,请尝试重新启动手机,然后重试。

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

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

请记住,手机上的 GPS 不是很准确,并且无法在建筑物内获得准确的读数,或者如果当时您所在地区的覆盖范围不足。

最后知道 position 没有给您当前的 position,就像它说的是最后知道 position 可能已经超过几分钟前。 它也可能来自手机信号塔读数,而不是 GPS 读数。

我正在使用此代码

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

    }

 
}

所以当我无法使用我用于调试的手机并使用我的个人手机进行测试时,我想通了,继续活动并且距离是正确的。

搞乱了调试手机设置和使用 GPS_PROVIDER 和 NETWORK_PROVIDER,当我的手机只使用 GPS 来获取位置时,它什么也没有。 其他手机可以,所以可以肯定地说我的调试手机的 GPS 坏了。 这是一部旧手机,当我得到一部新手机时,我将其恢复出厂设置以用于调试,因为它有助于向后兼容旧手机和更小的屏幕。 我从没想过重置后实际的硬件是否也有故障。

所以错误是手机本身而不是应用程序。 猜猜它显示有两个设备可以测试。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM