代码之家  ›  专栏  ›  技术社区  ›  Lechucico

onLocationResult在请求位置后从未调用

  •  0
  • Lechucico  · 技术社区  · 6 年前

    我试图获得我的设备在碎片中的最后一个已知位置:

    显示

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    

    定义

    private lateinit var fusedLocationClient: FusedLocationProviderClient
    private lateinit var mLocationRequest: LocationRequest
    private var location: Location? = null
    

    一次创建

    override fun onCreate(savedInstanceState: Bundle?)
    {
        super.onCreate(savedInstanceState)
    
        fusedLocationClient = LocationServices.getFusedLocationProviderClient(context as MainActivity)
        mLocationRequest = LocationRequest()
        mLocationRequest.interval = 120000
        mLocationRequest.fastestInterval = 120000
        mLocationRequest.priority = LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY
        mLocationRequest.numUpdates = 1
    }
    

    请求位置

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View?
    {
        // Inflate the layout for this fragment
        val view = inflater.inflate(R.layout.fragment_product_add, container, false)
    
        view.button_add_product.setOnClickListener(this)
        view.button_photo.setOnClickListener(this)
    
        if (ContextCompat.checkSelfPermission(view.context, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED)
        {
            fusedLocationClient.requestLocationUpdates(mLocationRequest, locationCallback, Looper.myLooper())
        }
        else
        {
            ActivityCompat.requestPermissions(this.context as MainActivity, arrayOf(Manifest.permission.ACCESS_FINE_LOCATION), REQUEST_LOCATION_PERMISSION)
        }
    
        return view
    }
    

    获取位置

    private val locationCallback: LocationCallback? = object : LocationCallback()
    {
        override fun onLocationResult(loc: LocationResult?)
        {
            super.onLocationResult(loc)
            val locations = loc?.locations
            if (locations != null)
            {
                val lastLocation = locations[locations.size - 1]
                location = lastLocation
                product_coordinates.setText("Lat:${location?.latitude} Lon:${location?.longitude}")
                fusedLocationClient.removeLocationUpdates(this)
            }
        }
    }
    

    locationCallback中的代码永远不会执行。

    我也试过下面的代码,但是 location 总是 null :

    fusedLocationClient.lastLocation.addOnSuccessListener(context as MainActivity) { location ->
        if (location != null) {
            product_coordinates.setText("Lat:${location.latitude} Lon:${location.longitude}")
        }
    }
    
    0 回复  |  直到 6 年前
    推荐文章