微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用FusedLocationProviderClient获取位置更新每秒一次

如何解决如何使用FusedLocationProviderClient获取位置更新每秒一次

我遇到了一种情况,我使用FusedLocationProciderClient使用Google定位服务获取位置更新。一切正常,但我遇到一个问题,我将“ Interval”和“ FastestInvert”设置为“ 1000表示1秒。但是当位置更新进入回调时,它需要1秒以上的时间,例如有时需要10秒,有时需要6并混合在一起,但总是超过5秒。我需要每秒更新一次位置。这是该课程的代码

public class MainActivity extends AppCompatActivity {

private FusedLocationProviderClient mFusedLocationProviderClient;
private LocationRequest locationRequest;

private LocationCallback locationCallback = new LocationCallback(){
    @Override
    public void onLocationResult(LocationResult locationResult) {
        if(locationResult == null){
            return;
        }

        for (Location location : locationResult.getLocations()){
            Log.i("mynewCoderes",""+location.toString());
        }
    }
};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mFusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(MainActivity.this);
    locationRequest = LocationRequest.create();
    locationRequest.setInterval(1000);
    locationRequest.setFastestInterval(1000);
    locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);

}

@Override
protected void onStart() {
    super.onStart();
    /* FirsT CHECK LOCATION PERMISSION */
    checkLocationPermission();
    /* FirsT CHECK LOCATION PERMISSION */
}

@Override
protected void onStop() {
    super.onStop();
    stopLocationUpdate();
}

private void checkSettingsAndStartUpdates() {
    LocationSettingsRequest request = new LocationSettingsRequest.Builder()
            .addLocationRequest(locationRequest).build();

    SettingsClient client = LocationServices.getSettingsClient(this);

    Task<LocationSettingsResponse> locationSettingsResponseTask = client.checkLocationSettings(request);
    locationSettingsResponseTask.addOnSuccessListener(new OnSuccessListener<LocationSettingsResponse>() {
        @Override
        public void onSuccess(LocationSettingsResponse locationSettingsResponse) {
            // here the settings are satisfied Now we request the location updates request
            startLocationUpdate();
        }
    });
    locationSettingsResponseTask.addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception e) {
            if(e instanceof ResolvableApiException){
                ResolvableApiException resolvable = (ResolvableApiException) e;
                try {
                    resolvable.startResolutionForResult(MainActivity.this,51);
                } catch (IntentSender.SendIntentException ex) {
                    ex.printstacktrace();
                }
            }
        }
    });
}

@SuppressLint("MissingPermission")
private void startLocationUpdate() {
    mFusedLocationProviderClient.requestLocationUpdates(locationRequest,locationCallback,Looper.getMainLooper());
}

private void stopLocationUpdate() {
    mFusedLocationProviderClient.removeLocationUpdates(locationCallback);
}

private void checkLocationPermission() {
    Dexter.withContext(MainActivity.this)
            .withPermission(Manifest.permission.ACCESS_FINE_LOCATION)
            .withListener(new PermissionListener() {
                @Override
                public void onPermissionGranted(PermissionGrantedResponse permissionGrantedResponse) {
                    checkSettingsAndStartUpdates();
                }

                @Override
                public void onPermissionDenied(PermissionDeniedResponse permissionDeniedResponse) {
                    // show reason dialog
                    AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);

                    builder.setTitle("Location permission required")
                            .setMessage("Without location permission you cannot go further")
                            .setPositiveButton("OK",new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(DialogInterface dialogInterface,int i) {
                                 checkLocationPermission();
                                }
                            })
                            .show();
                }

                @Override
                public void onPermissionRationaleShouldBeShown(PermissionRequest permissionRequest,PermissionToken permissionToken) {
                    permissionToken.continuePermissionRequest();
                }
            })
            .check();
}



@Override
protected void onActivityResult(int requestCode,int resultCode,@Nullable Intent data) {
    super.onActivityResult(requestCode,resultCode,data);

    if(requestCode == 51){
        if(resultCode == RESULT_OK){
            startLocationUpdate();
        }
    }
}

}

这是我在日志猫中打印的休憩处,请检查我在图片中突出显示的时间响应:

Location updates

注意:我通过坐在不旅行的同一位置来对此进行测试。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。