正如大多数人可能已经知道的那样,Google Play服务中有一个新的位置设置对话框API。
对于那些不知道的人是使用Dialog API的地图应用程序的屏幕截图。
google只在其播放服务中添加了API,这有点不公平。另一方面,我认为如果他们能够做到这一点,就会有一个解决方法来做到这一点。这就是我问这个问题的原因。任何信息都表示赞赏。
(注意:有一个漏洞允许开发人员以编程方式启用和禁用gps /位置设置。但是,SO上提供的这些技巧不再有效。请不要发布过时的答案。)< / p>
答案 0 :(得分:0)
嗨,这对我有用。
void initApiClient() {
GoogleApiClient mGoogleApiClient = new GoogleApiClient.Builder(getActivity())
.addApi(LocationServices.API)
.addConnectionCallbacks(new GoogleApiClient.ConnectionCallbacks() {
@Override
public void onConnected(@Nullable Bundle bundle) {
showLocationSettingsDialog();
}
@Override
public void onConnectionSuspended(int i) {
}
})
.addOnConnectionFailedListener(new GoogleApiClient.OnConnectionFailedListener() {
@Override
public void onConnectionFailed(@NonNull ConnectionResult result) {
Log.i(TAG, "onConnectionFailed() connectionResult = [" + result + "]");
}
})
.build();
mGoogleApiClient.connect();
}
void showLocationSettingsDialog() {
LocationRequest locationRequest = LocationRequest.create();
locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder();
builder.addLocationRequest(locationRequest);
builder.setAlwaysShow(true);
Task<LocationSettingsResponse> result = LocationServices.getSettingsClient(getActivity())
.checkLocationSettings(builder.build());
result.addOnCompleteListener(new OnCompleteListener<LocationSettingsResponse>() {
@Override
public void onComplete(Task<LocationSettingsResponse> task) {
try {
LocationSettingsResponse response = task.getResult(ApiException.class);
// All location settings are satisfied. The client can initialize location
// requests here.
} catch (ApiException e) {
switch (e.getStatusCode()) {
case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
// Location settings are not satisfied. But could be fixed by showing the
// user a dialog.
try {
// Cast to a resolvable exception.
ResolvableApiException resolvable = (ResolvableApiException) e;
// Show the dialog by calling startResolutionForResult(),
// and check the result in onActivityResult().
resolvable.startResolutionForResult(
getActivity(),
REQUEST_CHECK_SETTINGS);
} catch (IntentSender.SendIntentException exception) {
// Ignore the error.
} catch (ClassCastException exception) {
// Ignore, should be an impossible error.
}
break;
case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE:
// Location settings are not satisfied. However, we have no way to fix the
// settings so we won't show the dialog.
break;
}
}
}
});
}