CheckLocationSettingsを使用して、現在地が有効かどうかを確認しています。これは私のGalaxy S5で正常に動作しています。ただし、エミュレータのAndroid Kitkat 4.4では、LocationSettingsResultは、ロケーションが有効か無効かにかかわらず常に6(ResolutionRequired)です。私はYESと位置要求ポップアップを答える場合 も、OnActivityResultは私がxamarinを使用していますので、いくつかの部分が異なる探しRESULT_CANCELEDLocationSettings kitkatエミュレータの結果がキャンセルされました
常にある:
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。しかし、これは既に上のコードで実装されています... try { status.StartResolutionForResult(this、REQUEST_CHECK_SETTINGS); } catch(IntentSender.SendIntentException) { } – markus
もアンドロイド5.0エミュレータで同じ結果を得ました。許可要求を受け入れると結果は常にRESULT_CANCELEDになり、許可要求メッセージは、場所の有効/無効にかかわらず表示されます。アンドロイド4.4と同じ – markus