【问题标题】:'FusedLocationApi' is deprecated'FusedLocationApi' 已弃用
【发布时间】:2019-12-16 00:28:16
【问题描述】:

如何准确修复 requestLocationUpdates 的弃用警告。

Android LocationServices.FusedLocationApi deprecated 有答案。但我不明白如何解决它

@Override
public void onConnected(@Nullable Bundle bundle) {
    mLocationRequest = new LocationRequest();
    mLocationRequest.setInterval(1000);
    mLocationRequest.setFastestInterval(1000);
    mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);

    if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(DriverMapActivity.this,new String[]{Manifest.permission.ACCESS_FINE_LOCATION},LOCATION_REQUEST_CODE  );
    }
    LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this);




}

【问题讨论】:

标签: android android-fusedlocation


【解决方案1】:

你需要使用FusedLocationProverClient

private FusedLocationProviderClient fusedLocationClient;

在您的onCreate 方法中初始化fusedLocationClient

fusedLocationClient = LocationServices.getFusedLocationProviderClient(Activity.this);

请求位置更新

fusedLocationClient.requestLocationUpdates(locationRequest,
                locationCallback,
                null /* Looper */);

希望对你有帮助!

【讨论】:

    【解决方案2】:

    FusedLocationProviderApi 已被弃用很长时间,这就是官方指南建议使用FusedLocationProviderClient 的原因。只需致电startLocationUpdates() 以获取如下更新:

    override fun onResume() {
        super.onResume()
        if (requestingLocationUpdates) startLocationUpdates()
    }
    
    private fun startLocationUpdates() {
        fusedLocationClient.requestLocationUpdates(locationRequest,
                locationCallback,
                null /* Looper */)
    }
    

    【讨论】:

    • @shayanmalinda,添加了如何使用它来获取更新和资源的代码。请看一下。
    【解决方案3】:

    使用 FusedLocationProviderClient 类。这是谷歌希望我们使用的。

    我正在为您提供一个简短的示例。

    private FusedLocationProviderClient mFusedLocationClient;
    private LocationRequest locationRequest;
    private LocationCallbackImpl mLocationCallback = null;
    ...
    if (mFusedLocationClient == null) {
    
                locationRequest = new LocationRequest()
                        .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY)
                        .setInterval(1000)
                        .setFastestInterval(1000);
    
                LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder();
                builder.addLocationRequest(locationRequest);
    
                mFusedLocationClient = LocationServices.getFusedLocationProviderClient(activity);
                mFusedLocationClient.requestLocationUpdates(locationRequest, mLocationCallback, Looper.myLooper());
    
    }
    
    /**
      * Callback class
      */
    private class LocationCallbackImpl extends LocationCallback {
    
        private Activity activity;
    
        public LocationCallbackImpl(Activity activity) {
            this.activity = activity;
        }
    
        @Override
        public void onLocationResult(LocationResult locationResult) {
        }
    
    }
    

    【讨论】:

    • mFusedLocationClient = LocationServices.getFusedLocationProviderClient(activity);
    • activity 应该设置为适当的 Context 对象。如果您的代码在 Activity 中,只需调用“this”或“YourActivityName.this”即可。
    猜你喜欢
    • 2020-08-01
    • 2018-11-26
    • 2014-02-12
    • 2018-09-07
    • 1970-01-01
    • 2016-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多