我使用CheckLocationSettings来检查位置是否启用。这在我的Galaxy S5上工作正常。但是,在模拟器android kitkat 4.4中,LocationSettingsResult始终为6(ResolutionRequired),无论位置是启用还是禁用。 另外,如果我回答位置请求弹出用YES,则OnActivityResult总是RESULT_CANCELEDLocationSettings kitkat模拟器结果取消
我使用xamarin,所以一些地方寻找不同:
protected void buildGoogleApiClient()
{
mGoogleApiClient = new GoogleApiClient.Builder(this)
.AddConnectionCallbacks(this)
.AddOnConnectionFailedListener(this)
.AddApi(LocationServices.API)
.Build();
}
protected void createLocationRequest()
{
mLocationRequest = new LocationRequest();
mLocationRequest.SetInterval(UPDATE_INTERVAL_IN_MILLISECONDS);
mLocationRequest.SetFastestInterval(FASTEST_UPDATE_INTERVAL_IN_MILLISECONDS);
mLocationRequest.SetPriority(LocationRequest.PriorityLowPower);
}
protected void buildLocationSettingsRequest()
{
LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder();
builder.AddLocationRequest(mLocationRequest);
builder.SetAlwaysShow(true);
mLocationSettingsRequest = builder.Build();
}
protected async Task CheckLocationSettings()
{
var result = await LocationServices.SettingsApi.CheckLocationSettingsAsync(
mGoogleApiClient, mLocationSettingsRequest);
await HandleResult(result);
}
public async Task HandleResult(LocationSettingsResult locationSettingsResult)
{
var status = locationSettingsResult.Status;
switch (status.StatusCode)
{
case CommonStatusCodes.Success:
await getlastknownlocation();
break;
case CommonStatusCodes.ResolutionRequired:
try
{
status.StartResolutionForResult(this, REQUEST_CHECK_SETTINGS);
}
catch (IntentSender.SendIntentException)
{
}
break;
case LocationSettingsStatusCodes.SettingsChangeUnavailable:
break;
}
}
protected override async void OnActivityResult(int requestCode, Result resultCode, Intent data)
{
switch (requestCode)
{
case REQUEST_CHECK_SETTINGS:
switch (resultCode)
{
case Result.Ok:
await getlastknownlocation();
break;
case Result.Canceled:
break;
}
break;
}
}
THX
喜,THX你的答案。然而,这已经在上面的代码中实现了...尝试 status.StartResolutionForResult(this,REQUEST_CHECK_SETTINGS); } catch(IntentSender.SendIntentException) { } – markus
现在也尝试使用android 5.0仿真器,结果相同。接受权限请求后,结果始终为RESULT_CANCELED,并且无论位置是启用还是禁用,都会显示权限请求消息。和android 4.4一样 – markus