Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从lastKnownLocation()获取经度和纬度?_Java_Android_Location - Fatal编程技术网

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

Java 从lastKnownLocation()获取经度和纬度?,java,android,location,Java,Android,Location,我有一个活动,一旦创建,它会计算您的位置和附近事件之间的距离,我使用lastKnownLocation获取当前设备位置,并将其标记在谷歌地图上,但我需要它在计算距离的方法之外写入经度和纬度 我已经使用LocationManager获得了粗略的坐标,但是这些坐标不够精确,而且对于不到半英里远的物体来说,距离为50英里。我目前有它,所以将覆盖从LocationManager获得的经度和纬度,但它没有 我也尝试过使用LocationRequest,但没有效果 L

我有一个活动,一旦创建,它会计算您的位置和附近事件之间的距离,我使用lastKnownLocation获取当前设备位置,并将其标记在谷歌地图上,但我需要它在计算距离的方法之外写入经度和纬度

我已经使用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;
                            }
                        }
                    });
LocationRequest LocationRequest=LocationRequest.create();
位置请求设置间隔(60000);
locationRequest.SetFastTestInterval(5000);
locationRequest.setPriority(locationRequest.PRIORITY\u高精度);
LocationCallback LocationCallback=新LocationCallback(){
@凌驾
public void onLocationResult(LocationResult LocationResult){
if(locationRequest==null){
返回;
}
对于(位置:locationResult.getLocations()){
如果(位置!=null){
userLat=location.getLatitude();
userLng=location.getLongitude();
}
}
}
};
getFusedLocationProviderClient(EventLocator.this).RequestLocationUpdate(locationRequest,locationCallback,null);
LocationServices.getFusedLocationProviderClient(EventLocator.this).getLastLocation().addOnSuccessListener(新OnSuccessListener()){
@凌驾
成功时的公共无效(位置){
如果(位置!=null){
double longitude=location.getLongitude();
双纬度=location.getLatitude();
userLng=经度;
userLat=纬度;
}
}
});

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

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

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

请记住,手机上的GPS不是很精确,无法获得建筑物内部的准确读数,或者如果当时你所在区域的覆盖范围不够,也无法获得准确读数

“最后知道的职位”并没有给出您当前的职位,就像它所说的,这是“最后知道的职位”,可能是在几分钟前。它也可能是来自手机发射塔的读数,而不是GPS的读数

  • 确保在清单文件中添加了位置权限

  • 如果您使用的是上面提到的android os 6,请确保您具有位置权限

  • 确保您的手机已启用GPS服务

    公共位置getLocation(){ LocationManager LocationManager=(LocationManager)this.getSystemService(Context.LOCATION_服务);
    如果(locationManager!=null){
    Location lastKnownLocationGPS=locationManager.getLastKnownLocation(locationManager.GPS\U提供程序); 如果(lastnownlocationgps!=null){
    返回lastnownlocatingps; }否则{
    Location loc=locationManager.getLastKnownLocation(locationManager.PASSIVE\u提供程序); System.out.println(“1::”+loc);----在这里得到null System.out.println(“2::”+loc.getLatitude()); 返回loc; } }否则{
    返回null; } }

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

    我正在使用此代码

    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_提供程序和网络_提供程序时,我的手机只使用GPS来获取位置,结果一无所获。其他手机可以,所以说我的调试手机的GPS坏了是安全的。 这是一款旧手机,当我买了一款新手机时,我会将它的出厂设置重置为用于调试,因为它有助于旧手机和更小屏幕的向后兼容性。我从来没有想过,如果实际的硬件故障后,重置太多


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

    您得到的某些时间位置不正确。您可以在计算距离之前检查精度。Location.getaccuracy()您可以发送一些指向教程或其他内容的链接吗?我已经找了好几个小时的资源,但都没有找到。地图标记的getLastLocation()非常准确。因此,它肯定正确地选择了我的位置,是位置经理,但它没有选择准确的位置。这就是为什么我再次尝试使用getLastPosition(),但需要在onSuccess方法之外写入坐标。在onSuccess方法之外,您的确切意思是什么?如果要处理位置信息,必须在onSuccess方法中进行。位置请求也是如此。我用它来获取不准确的坐标,这就是为什么我要使用fusedLocationProviderClient.Update;这在onDataChange方法的回收器视图中。当有人添加到