2016-11-07 2 views
0

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

答えて

0

あなたがRESOLUTION_REQUIREDを取得する場合(C#:ResolutionRequired)、ユーザーに許可を求める必要があります。

ステータスコードRESOLUTION_REQUIREDは、設定を変更する必要があることを示します。ユーザーに場所の設定を変更する権限を要求するには、startResolutionForResult(Activity、int)を呼び出します。このメソッドは、場所の設定を変更するためのユーザーの権限を求めるダイアログを表示します。あなたは、ユーザーが許可を付与するかどうかを決定するためにOnActivityResultでチェックすることができ、結果コードと

コールStartResolutionForResult

if (status.StatusCode == LocationSettingsStatusCodes.ResolutionRequired) 
{ 
    status.StartResolutionForResult(this, 9999); 
} 

参考:https://developer.android.com/training/location/change-location-settings.html

+0

やあ、あなたの答えのためのTHX。しかし、これは既に上のコードで実装されています... try { status.StartResolutionForResult(this、REQUEST_CHECK_SETTINGS); } catch(IntentSender.SendIntentException) { } – markus

+0

もアンドロイド5.0エミュレータで同じ結果を得ました。許可要求を受け入れると結果は常にRESULT_CANCELEDになり、許可要求メッセージは、場所の有効/無効にかかわらず表示されます。アンドロイド4.4と同じ – markus

関連する問題