首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何正确地停止FusedLocationProviderClient?

如何正确地停止FusedLocationProviderClient?
EN

Stack Overflow用户
提问于 2017-12-18 08:19:51
回答 2查看 2.1K关注 0票数 0

我在FusedLocationProviderClient中使用Service

我想以一种正确的方式“阻止”它。

使用下面的代码好吗?

代码语言:javascript
复制
 @Override
    public void onDestroy() {
        super.onDestroy();
        // Stop Looper of FusedLocationProviderClient  
        if (locationClient != null) {
            locationClient = null;
        }
    }

其余的代码

代码语言:javascript
复制
FusedLocationProviderClient locationClient;


protected void startLocationUpdates() {


        // Create the location request to start receiving updates
        mLocationRequest = new LocationRequest();
        mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
        mLocationRequest.setInterval(UPDATE_INTERVAL);
        mLocationRequest.setFastestInterval(FASTEST_INTERVAL);

        // Create LocationSettingsRequest object using location request
        LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder();
        builder.addLocationRequest(mLocationRequest);
        LocationSettingsRequest locationSettingsRequest = builder.build();

        // Check whether location settings are satisfied
        // https://developers.google.com/android/reference/com/google/android/gms/location/SettingsClient
        SettingsClient settingsClient = LocationServices.getSettingsClient(this);
        settingsClient.checkLocationSettings(locationSettingsRequest);

        // new Google API SDK v11 uses getFusedLocationProviderClient(this)
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {

            return;
        }

        locationClient = getFusedLocationProviderClient(this);getFusedLocationProviderClient(this).requestLocationUpdates(mLocationRequest, new LocationCallback() {
                    @Override
                    public void onLocationResult(LocationResult locationResult) {
                        // do work here
                        onLocationChanged(locationResult.getLastLocation());
                    }
                }, Looper.myLooper());
    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-12-21 09:00:18

只需在removeLocationUpdates中调用onDestroy

对于requestLocationUpdates,它说:

此调用将使Google服务连接保持活动状态,因此确保在不再需要时调用removeLocationUpdates(LocationCallback),否则将失去自动连接管理的好处。

票数 2
EN

Stack Overflow用户

发布于 2017-12-21 09:14:41

只需将onDestroy();更改为:

代码语言:javascript
复制
@Override
    protected void onDestroy() {
        super.onDestroy();
        if(locationclient!=null)
            locationclient.disconnect();
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47864434

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档