按照下面提到的步骤进行
1) 根据您的意愿创建LocationRequest
LocationRequest mLocationRequest = LocationRequest.create()
.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY)
.setInterval(10 * 1000)
.setFastestInterval(1 * 1000);
2)创建LocationSettingsRequest.Builder
LocationSettingsRequest.Builder settingsBuilder = new LocationSettingsRequest.Builder()
.addLocationRequest(mLocationRequest);
settingsBuilder.setAlwaysShow(true);
3) 使用以下代码获取LocationSettingsResponse Task
Task<LocationSettingsResponse> result = LocationServices.getSettingsClient(this)
.checkLocationSettings(settingsBuilder.build());
注意: LocationServices.SettingsApi 已弃用,因此请改用 SettingsClient。
4) 添加OnCompleteListener 以从Task 中获取结果。当Task 完成时,客户端可以通过查看LocationSettingsResponse 中的状态码来检查位置设置目的。
result.addOnCompleteListener(new OnCompleteListener<LocationSettingsResponse>() {
@Override
public void onComplete(@NonNull Task<LocationSettingsResponse> task) {
try {
LocationSettingsResponse response =
task.getResult(ApiException.class);
} catch (ApiException ex) {
switch (ex.getStatusCode()) {
case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
try {
ResolvableApiException resolvableApiException =
(ResolvableApiException) ex;
resolvableApiException
.startResolutionForResult(MapsActivity.this,
LOCATION_SETTINGS_REQUEST);
} catch (IntentSender.SendIntentException e) {
}
break;
case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE:
break;
}
}
}
});
案例 1: LocationSettingsStatusCodes.RESOLUTION_REQUIRED :位置未启用,但我们可以通过提示用户使用对话框打开位置来要求用户启用位置(通过调用 startResolutionForResult) .
案例 2: LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE :不满足位置设置。但是,我们无法修复设置,因此我们不会显示对话框。
5) OnActivityResult 我们可以在位置设置对话框中获取用户操作。 RESULT_OK => 用户打开了位置。 RESULT_CANCELLED - 用户拒绝了位置设置请求。