在安卓设备中获取水平和垂直精度

4

我正在开发一款安卓位置追踪应用。

    public void onLocationChanged(Location location) {
    System.out.println(location);
    }
    so it gives meLocation[mProvider=network,mTime=1302690466456,mLatitude=21.1596426,mLongitude=72.8072426
,mHasAltitude=false,mAltitude=0.0,mHasSpeed=false,mSpeed=0.0,mHasBearing=false,mBearing=0.0
,mHasAccuracy=true,mAccuracy=75.0,mExtras=Bundle[mParcelledData.dataSize=148]]

我希望能够获得水平及垂直的精度值。请问如何获取这两个数值?谢谢。


Android中的位置管理网站? - Aman Alam
4个回答

1
已经过去了8年3个月。也许你已经找到了解决方案。它可能会帮助像我这样正在寻求水平和垂直精度帮助的人。
在Android位置文档中,它指出:
- getAccuracy()获取此位置的估计水平精度(以米为单位)。 - getVerticalAccuracyMeters()获取此位置的估计垂直精度(以米为单位)。 - 您可以在以下由Android管理的链接中找到所有与位置相关的服务和功能。

https://developer.android.com/reference/android/location/Location

=======


1

我确实想要达到相同的目标,现在你可以通过 LocationCallback 中可用的许多其他信息来实现这一点。我已经启用了一个用于获取位置的 Service,因此 LocationCallback 放置在我的服务类 LocationService 中。

为此,您必须按照以下所述调用 LocationCallback 对象:

private lateinit var locationCallback: LocationCallback

locationCallback = object : LocationCallback() {
        override fun onLocationResult(locationResult: LocationResult) {
            if (locationResult.lastLocation != null) {
                val location = locationResult.lastLocation
                val intent = Intent(ACTION_LOCATION_UPDATE)
                // Add the current location as an extra to the intent
                intent.putExtra(EXTRA_LOCATION, location)
                val latitude = locationResult.lastLocation!!.latitude
                val longitude = locationResult.lastLocation!!.longitude
                Log.d("LAT_LOND","Current Position : $latitude | $longitude")
                sendBroadcast(intent)

            }
        }
    }

现在你需要使用FusedLocationProviderClient来调用回调函数。

private lateinit var fusedLocationClient: FusedLocationProviderClient

  // Initialize fusedLocationClient
  fusedLocationClient = LocationServices.getFusedLocationProviderClient(this)

 //Calling the locationCallback object

  fusedLocationClient.requestLocationUpdates(
        LocationUtils.getLocationRequest(),
        locationCallback,
        null
    )

在这里,你可以看到我已经将整个location对象传递给了一个BroadcastReceiver,因为我想要在一个活动中显示这些信息。附上活动代码供参考。

private val receiver = object : BroadcastReceiver() {
    @RequiresApi(Build.VERSION_CODES.O)
    @SuppressLint("SetTextI18n")
    override fun onReceive(context: Context, intent: Intent) {
        if (intent.action == LocationService.ACTION_LOCATION_UPDATE) {
            val location = intent.getParcelableExtra<Location>(LocationService.EXTRA_LOCATION)
            // Updating the UI with the new location data
            binding.tvLat.text = location?.latitude.toString().trim()
            binding.tvLong.text = location?.longitude.toString().trim()
            binding.tvAcc.text = "${location?.accuracy.toString().trim()} meters in horizontal"
            binding.tvAccVer.text =
                "${location?.verticalAccuracyMeters.toString().trim()} meters in vertical"
            binding.tvTime.text = convertLongToTime(location?.time!!)
        }
    }
}

您可以看到locationCallback对象包含所有数据,从中您可以检索所需的信息。

此外,请注意,您应启用获取位置和接收位置数据的所有必需权限。

为了更好地理解,我分享了一个链接,您可以从用户那里启用运行时权限并与应用程序交互,以便应用程序不会表现不当。

链接 - Android运行时位置权限

欢迎随时发表您的想法,并在需要时提出任何更改建议。


0

没有垂直或水平精度。精度适用于所有位置。


1
有垂直精度,但安卓系统不会从GPS芯片中转发此信息。 - AlexWien
在GPS定位方面,确实存在垂直精度和水平精度之分。不涉及数学原理,只需考虑这样一个事实:为了显示海拔高度,GPS设备通常需要比水平定位所需的最低卫星数量多一个卫星。 - Jonan Gueorguiev

-1

这是针对我们选择提供者时的情况,如果我们只选择GPS,然后想要在那个时候找到垂直和水平精度,那么这就没有用了。 - Siddhpura Amit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接