【问题标题】:Location-Manager not returning location consistently位置管理器没有一致地返回位置
【发布时间】:2021-08-16 09:10:08
【问题描述】:

我正在使用网络提供商获取用户的最后一个已知位置。当我测试它时,它在我的一部手机上运行良好,但纬度和经度在另一部手机上返回空值。是否有替代位置管理器以获得更一致的结果。或者我的代码中是否还有其他错误

这是我的权限检查代码:

if (ContextCompat.checkSelfPermission(
                applicationContext,
                Manifest.permission.ACCESS_COARSE_LOCATION
            ) != PackageManager.PERMISSION_GRANTED
        ) {
            AlertDialog.Builder(this)
                .setCancelable(false)
                .setTitle("Please Grant Location Permissions")
                .setPositiveButton("Ok", null)
                .show()
            ActivityCompat.requestPermissions(
                this,
                arrayOf(Manifest.permission.ACCESS_COARSE_LOCATION),
                101
            )
        }

还有我的位置请求代码

 longitude =
            locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER)?.longitude
        latitude =
            locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER)?.latitude
        val geocoder = Geocoder(this)
        if (latitude != null && longitude != null) {
            val addresses: List<Address> = geocoder.getFromLocation(latitude, longitude, 1)
            val cityName = addresses[0].subAdminArea
          }

【问题讨论】:

    标签: android google-maps kotlin location geocoder


    【解决方案1】:

    如文件所述

    从给定的提供者获取最后一个已知位置,如果没有最后一个已知位置,则为 null。在某些情况下,返回的位置可能很旧,因此应始终检查位置的年龄。 这将永远不会激活传感器来计算新位置,并且只会返回缓存的位置。 另请参阅 getCurrentLocation(String, CancellationSignal, Executor, Consumer) ,它将始终尝试返回当前位置,但与此方法相比,在尝试过程中可能会使用额外的功率。 参数: provider – 由 getAllProviders() 列出的提供者 回报: 给定提供程序的最后一个已知位置,如果不可用,则返回 null 抛出: SecurityException – 如果不存在合适的权限 IllegalArgumentException – 如果提供者为 null 或不存在

    所以如果最后一个位置返回 null,您必须请求新的或自定义处理程序

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-05
      • 1970-01-01
      • 1970-01-01
      • 2012-04-23
      • 2012-01-06
      • 2021-10-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多