如果用户选择从不选项,则为 Android 启用位置服务
Enable location services for Android if user chose Never option
如果用户之前选择了“从不”选项,是否有任何方法可以再次允许应用程序使用定位服务(或至少显示对话框)?
我没有在代码中找到任何方法来再次显示它,因为我总是在 onResult(..) 回调中得到 LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE:
@Override
public void onResult(LocationSettingsResult locationSettingsResult) {
final Status status = locationSettingsResult.getStatus();
switch (status.getStatusCode()) {
case LocationSettingsStatusCodes.SUCCESS:
Log.i(TAG, "All location settings are satisfied.");
// startLocationUpdates();
break;
case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
Log.i(TAG, "Location settings are not satisfied. Show the user a dialog to" +
"upgrade location settings ");
try {
// Show the dialog by calling startResolutionForResult(), and check the result
// in onActivityResult().
status.startResolutionForResult(activity, REQUEST_CHECK_SETTINGS);
} catch (IntentSender.SendIntentException e) {
Log.i(TAG, "PendingIntent unable to execute request.");
}
break;
case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE:
Log.i(TAG, "Location settings are inadequate, and cannot be fixed here. Dialog " +
"not created.");
break;
}
}
我找到的唯一解决办法是重新安装应用程序或清除数据。
对,从不就是从不!如果用户之前回答了 "not now" 到您应用的位置权限请求,您可以生成一个对话框询问权限。但是,如果他们选择了不再让您询问,那将是永久设置,您必须告诉他们删除并重新安装。 (如果他们的位置暂时关闭,但应用程序有权访问他们的位置,则会产生一个对话框,要求更改设备的位置服务状态。)
如果位置是应用程序的必要组成部分,您可以考虑在安装时要求访问权限。在即将推出的 Android M 中,可以为每个应用设置和重置单独的权限,有助于避免此类问题。
如果用户之前选择了“Never”选项,我没有找到任何启用位置服务的解决方法,所以我按照@Lesvmac 上面的回答再次询问用户删除并重新安装应用程序,但我认为这不是解决此问题的正确方法。
所以目前最好的办法是不允许"Never"选项出现在请求对话框中。尝试添加
builder.setAlwaysShow(true);
到LocationSettingsRequest.Builder
这将导致只有“Yes”和“No”选项而不是默认的“Never”, “是”&“不是现在”&你永远不会收到SETTINGS_CHANGE_UNAVAILABLE
完整方法如下:
private void requestSettings() {
LocationSettingsRequest.Builder builder =
new LocationSettingsRequest.Builder()
.setAlwaysShow(true)
.addLocationRequest(request);
PendingResult<LocationSettingsResult> result =
LocationServices.SettingsApi.checkLocationSettings(mGoogleApiClient,
builder.build());
result.setResultCallback(this);
}
之前
之后
您需要手动允许该特定应用程序的权限才能重置请求权限对话框。
打开应用程序信息(通过从应用程序启动器拖动,或设置 - 应用程序 - [应用程序名称])
Select 权限
启用您用 "never ask again"
拒绝的权限
(可选)从这里再次禁用它;请注意,此时您的应用会在需要时再次请求权限。
解决方案非常简单也很容易遗漏(至少在 Android 5.1 上)...
从屏幕顶部边缘向下滑动以获取下拉菜单。按 "App permission management"。按应用程序和您要更改权限的应用程序。瞧!
如果用户之前选择了“从不”选项,是否有任何方法可以再次允许应用程序使用定位服务(或至少显示对话框)?
我没有在代码中找到任何方法来再次显示它,因为我总是在 onResult(..) 回调中得到 LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE:
@Override
public void onResult(LocationSettingsResult locationSettingsResult) {
final Status status = locationSettingsResult.getStatus();
switch (status.getStatusCode()) {
case LocationSettingsStatusCodes.SUCCESS:
Log.i(TAG, "All location settings are satisfied.");
// startLocationUpdates();
break;
case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
Log.i(TAG, "Location settings are not satisfied. Show the user a dialog to" +
"upgrade location settings ");
try {
// Show the dialog by calling startResolutionForResult(), and check the result
// in onActivityResult().
status.startResolutionForResult(activity, REQUEST_CHECK_SETTINGS);
} catch (IntentSender.SendIntentException e) {
Log.i(TAG, "PendingIntent unable to execute request.");
}
break;
case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE:
Log.i(TAG, "Location settings are inadequate, and cannot be fixed here. Dialog " +
"not created.");
break;
}
}
我找到的唯一解决办法是重新安装应用程序或清除数据。
对,从不就是从不!如果用户之前回答了 "not now" 到您应用的位置权限请求,您可以生成一个对话框询问权限。但是,如果他们选择了不再让您询问,那将是永久设置,您必须告诉他们删除并重新安装。 (如果他们的位置暂时关闭,但应用程序有权访问他们的位置,则会产生一个对话框,要求更改设备的位置服务状态。) 如果位置是应用程序的必要组成部分,您可以考虑在安装时要求访问权限。在即将推出的 Android M 中,可以为每个应用设置和重置单独的权限,有助于避免此类问题。
如果用户之前选择了“Never”选项,我没有找到任何启用位置服务的解决方法,所以我按照@Lesvmac 上面的回答再次询问用户删除并重新安装应用程序,但我认为这不是解决此问题的正确方法。
所以目前最好的办法是不允许"Never"选项出现在请求对话框中。尝试添加
builder.setAlwaysShow(true);
到LocationSettingsRequest.Builder 这将导致只有“Yes”和“No”选项而不是默认的“Never”, “是”&“不是现在”&你永远不会收到SETTINGS_CHANGE_UNAVAILABLE
完整方法如下:
private void requestSettings() {
LocationSettingsRequest.Builder builder =
new LocationSettingsRequest.Builder()
.setAlwaysShow(true)
.addLocationRequest(request);
PendingResult<LocationSettingsResult> result =
LocationServices.SettingsApi.checkLocationSettings(mGoogleApiClient,
builder.build());
result.setResultCallback(this);
}
之前
之后
您需要手动允许该特定应用程序的权限才能重置请求权限对话框。
打开应用程序信息(通过从应用程序启动器拖动,或设置 - 应用程序 - [应用程序名称])
Select 权限
启用您用 "never ask again"
拒绝的权限(可选)从这里再次禁用它;请注意,此时您的应用会在需要时再次请求权限。
解决方案非常简单也很容易遗漏(至少在 Android 5.1 上)...
从屏幕顶部边缘向下滑动以获取下拉菜单。按 "App permission management"。按应用程序和您要更改权限的应用程序。瞧!