gpt4 book ai didi

android - Xamarin android根据经纬度获取地址

转载 作者:行者123 更新时间:2023-11-29 01:17:55 25 4
gpt4 key购买 nike

我是 xamarin Android 的新手....我有一个应用程序可以向用户显示当前的纬度和经度,它似乎可以正常工作...

现在,根据纬度和经度,我正在尝试使用 API Geocoder 获取地址。我正在传递正确的纬度和经度,但它没有给我任何地址,尽管我看不到任何错误。

以下是我的代码:-

async Task<Address> ReverseGeocodeCurrentLocationAsync(double Latitude, double Longitude)
{
Geocoder geocoder = new Geocoder(this);
IList<Address> addressList = await
geocoder.GetFromLocationAsync(Latitude, Longitude, 10); // ???????? its not wrking....Here, Im properly able to pass latitude and longitude still issue getting adress.

IList<Address> testaddresses = await geocoder.GetFromLocationAsync(42.37419, -71.120639, 1); // ???????? i tried both sync and async method but not wrking....

Address address = addressList.FirstOrDefault();
return address;
}

//调用部分 地址address = await ReverseGeocodeCurrentLocationAsync(location.Latitude, location.Longitude);

此外,您还可以在以下位置找到源代码:https://github.com/4pawan/XamarinDroidSample

请让我知道我做错了什么以及如何纠正?

问候,帕万

最佳答案

  • 始终检查 Geocoder 是否可用,因为这需要后台服务可用,并且它可能不可用,因为它未包含在基本 Android 框架中:

    Geocoder.IsPresent

  • 在 Google 的 Dev API 控制台中注册您的应用

  • 将您的 Google Map API key 添加到您应用的 list 中

  • 如果您正在使用 Google 的融合位置提供程序(通过 Google Play 服务)并需要地理编码,请确保您的应用具有 ACCESS_FINE_LOCATION 权限:

  • 需要网络连接才能从 Geocoder 服务接收地址列表。

  • 根据您设备的Geocoder 服务,在“Google”或您设备的 Geocoder 服务回复地址列表之前,它可能需要多个请求

    • 不要向服务发送垃圾邮件,您会受到限制,请在请求之间增加时间延迟。

注意:一个非常频繁的响应是:

`Timed out waiting for response from server`

在这种情况下,请稍等片刻,然后重试。

但还有许多其他错误,包括未找到地址、无效的纬度/日志、当前不可用的地理编码器等...

注意:我通常使用 ReactiveUI 来包装失败、重试和继续,但这里有一个简单的例子:

基本地理编码方法(很像您的方法):

async Task<Address> ReverseGeocodeLocationAsync(Location location)
{
try
{
var geocoder = new Geocoder(this);
IList<Address> addressList = await geocoder.GetFromLocationAsync(location.Latitude, location.Longitude, 3);
Address address = addressList.FirstOrDefault();
return address;
}
catch (Exception e)
{
Log.Error(TAG, e.Message);
}
return null;
}

重试:

int retry = 0;
Address address = null;
do
{
address = await ReverseGeocodeLocationAsync(_currentLocation);
if (address != null)
{
Log.Info(TAG, $"Address found: {address.ToString()}");
// Do something with the address(es)
break;
}
retry++;
Log.Warn(TAG, $"No addresses returned...., retrying in {retry * 2} secs");
await Task.Delay(retry * 2000);
} while (retry < 10);

关于android - Xamarin android根据经纬度获取地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38495266/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com