【问题标题】:How to get just one location with fused location client?如何使用融合位置客户端仅获得一个位置?
【发布时间】:2018-08-23 11:38:56
【问题描述】:

我想要的是只获得一个新位置并在获得第一次位置更新并将其添加到领域后删除位置更新,但面临的问题是有时在一次更新中获得超过 100 个位置并在领域崩溃中执行 100 个事务应用

public void getCurrentLocation(final Context context) {

    LocationRequest mLocationRequest;
    final LocationCallback mLocationCallback;
    final FusedLocationProviderClient mFusedLocationClient;
    mFusedLocationClient = LocationServices.getFusedLocationProviderClient(context);
    mLocationRequest = new LocationRequest();
    mLocationRequest.setInterval(60000);
    mLocationRequest.setFastestInterval(60000);
    mLocationRequest.setNumUpdates(1);
    mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
    if (ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
        return;
    }


    mLocationCallback = new LocationCallback() {
        @Override
        public void onLocationResult(LocationResult locationResult)
        {
            if (locationResult == null)
            {
                return;
            }
            mFusedLocationClient.removeLocationUpdates(this);

            Location tempLocation = locationResult.getLastLocation();
            if (locationResult.getLocations().size() > 0)
            {
                tempLocation = locationResult.getLocations().get(0);
            }
            if(tempLocation != null )
            {
                RealmManager.writeLocationInRealm(context, tempLocation, true, 0);
            }
        }
    };

    mFusedLocationClient.requestLocationUpdates(mLocationRequest, mLocationCallback, null);
}

【问题讨论】:

    标签: android realm fusedlocationproviderclient


    【解决方案1】:

    您可以通过以下代码实现此目的

    此代码在 Kotlin 中

    private var fusedLocationClient: FusedLocationProviderClient?=null
    

    在你的 onCreate() 中

    fusedLocationClient = LocationServices.getFusedLocationProviderClient(this@YourActivity)
            fusedLocationClient!!.lastLocation
                    .addOnSuccessListener { location: Location? ->
                            //Your lattitude location!!.latitude
                            //Your Longitude location.longitude
                        }
    

    【讨论】:

    • 这是获取最后位置的代码,有时它不会提供新的位置,所以这无济于事
    【解决方案2】:

    我遇到了同样的问题,这就是我在 kotlin 中解决它的方法

    fusedLocationClient = LocationServices.getFusedLocationProviderClient(this)
    
            locationCallback = object : LocationCallback() {
                override fun onLocationResult(locationResult: LocationResult) {
                    super.onLocationResult(locationResult)
    
    
                    if (locationResult.lastLocation != null && locationResult.lastLocation.latitude > 0 && locationResult.lastLocation.longitude > 0) {
    
                        UserLocationObject.lastLocation = locationResult.lastLocation
    
                        fusedLocationClient.removeLocationUpdates(locationCallback)
    
                    }
                }
    
    
    }
    

    【讨论】:

    • 但是经纬度可以是
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-28
    • 1970-01-01
    • 1970-01-01
    • 2016-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多