【问题标题】:How to use Fuse android location provider in a service?如何在服务中使用 Fuse android 位置提供程序?
【发布时间】:2019-03-31 04:56:36
【问题描述】:

我正在尝试在 android 的服务中使用 Fuse 提供程序来获取后台位置。

  private void init() {
    context = this;
    mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
    mSettingsClient = LocationServices.getSettingsClient(this);

    mLocationCallback = new LocationCallback() {
        @Override
        public void onLocationResult(LocationResult locationResult) {
            super.onLocationResult(locationResult);
            // location is received
            mCurrentLocation = locationResult.getLastLocation();
            mLastUpdateTime = DateFormat.getTimeInstance().format(new Date());

            showLocation();
        }
    };

    mRequestingLocationUpdates = false;

    mLocationRequest = new LocationRequest();
    mLocationRequest.setInterval(UPDATE_INTERVAL_IN_MILLISECONDS);
    mLocationRequest.setFastestInterval(FASTEST_UPDATE_INTERVAL_IN_MILLISECONDS);
    mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);

    LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder();
    builder.addLocationRequest(mLocationRequest);
    mLocationSettingsRequest = builder.build();
}

   private void startLocationUpdates() {
    mSettingsClient
            .checkLocationSettings(mLocationSettingsRequest)
     =====>>>>       .addOnSuccessListener(this, new OnSuccessListener<LocationSettingsResponse>() {
                @SuppressLint("MissingPermission")
                @Override
                public void onSuccess(LocationSettingsResponse locationSettingsResponse) {
                    Log.i(TAG, "Started location updates!");
                    mFusedLocationClient.requestLocationUpdates(mLocationRequest, mLocationCallback, Looper.myLooper());

                     showLocation();
                }
            })
    =====>>>>        .addOnFailureListener(this, new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {

                }
            });
}

在服务中我不能使用“this”,因为它指的是一个活动。

我想知道如何在服务中实现这段代码?

【问题讨论】:

    标签: android service android-fusedlocation


    【解决方案1】:

    我已经把它改成了这个,并且工作了......

        private void init() {
        context = this;
        mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
        mSettingsClient = LocationServices.getSettingsClient(this);
    
        mLocationCallback = new LocationCallback() {
            @Override
            public void onLocationResult(LocationResult locationResult) {
                super.onLocationResult(locationResult);
                // location is received
                mCurrentLocation = locationResult.getLastLocation();
                mLastUpdateTime = DateFormat.getTimeInstance().format(new Date());
    
                showLocation();
            }
        };
    
        mRequestingLocationUpdates = false;
    
        mLocationRequest = new LocationRequest();
        mLocationRequest.setInterval(UPDATE_INTERVAL_IN_MILLISECONDS);
        mLocationRequest.setFastestInterval(FASTEST_UPDATE_INTERVAL_IN_MILLISECONDS);
        mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
    
        LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder();
        builder.addLocationRequest(mLocationRequest);
        mLocationSettingsRequest = builder.build();
        }
    
    
    
         private void startLocationUpdates() {
            mSettingsClient
                    .checkLocationSettings(mLocationSettingsRequest)
             =====>>>>       .addOnSuccessListener(new OnSuccessListener<LocationSettingsResponse>() {
                        @SuppressLint("MissingPermission")
                        @Override
                        public void onSuccess(LocationSettingsResponse locationSettingsResponse) {
                            Log.i(TAG, "Started location updates!");
                            mFusedLocationClient.requestLocationUpdates(mLocationRequest, mLocationCallback, Looper.myLooper());
    
                         showLocation();
                    }
                })
        =====>>>>        .addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
    
                    }
                });
    }
    

    【讨论】:

      猜你喜欢
      • 2016-05-13
      • 2011-01-20
      • 1970-01-01
      • 2012-03-24
      • 2011-01-20
      • 1970-01-01
      • 2013-09-01
      • 1970-01-01
      • 2013-08-02
      相关资源
      最近更新 更多