protected override void OnHandleIntent(Android.Content.Intent intent) { var errorMessage = string.Empty; mReceiver = intent.GetParcelableExtra(Constants.Receiver) as ResultReceiver; if (mReceiver == null) { Log.Wtf(TAG, "No receiver received. There is nowhere to send the results."); return; } var location = (Location)intent.GetParcelableExtra(Constants.LocationDataExtra); if (location == null) { errorMessage = GetString(Resource.String.no_location_data_provided); Log.Wtf(TAG, errorMessage); DeliverResultToReceiver(Result.FirstUser, errorMessage); return; } var geocoder = new Geocoder(this, Java.Util.Locale.Default); List <Address> addresses = null; try { addresses = new List <Address>(geocoder.GetFromLocation(location.Latitude, location.Longitude, 1)); } catch (IOException ioException) { errorMessage = GetString(Resource.String.service_not_available); Log.Error(TAG, errorMessage, ioException); } catch (IllegalArgumentException illegalArgumentException) { errorMessage = GetString(Resource.String.invalid_lat_long_used); Log.Error(TAG, string.Format("{0}. Latitude = {1}, Longitude = {2}", errorMessage, location.Latitude, location.Longitude), illegalArgumentException); } if (addresses == null || addresses.Count == 0) { if (string.IsNullOrEmpty(errorMessage)) { errorMessage = GetString(Resource.String.no_address_found); Log.Error(TAG, errorMessage); } DeliverResultToReceiver(Result.FirstUser, errorMessage); } else { Address address = addresses.FirstOrDefault(); var addressFragments = new List <string>(); for (int i = 0; i <= address.MaxAddressLineIndex; i++) { addressFragments.Add(address.GetAddressLine(i)); } Log.Info(TAG, GetString(Resource.String.address_found)); DeliverResultToReceiver(Result.Canceled, string.Join("\n", addressFragments)); } }