如何使用Xamarin.Forms和GoogleMaps / GeoLocation

时间:2016-06-20 08:01:55

标签: google-maps geolocation xamarin.android xamarin.forms

我正在编写一个Xamarin.Forms PCL应用程序,以支持我的应用程序的iOS和Android操作系统。

在根项目中,我有一个包含ViewList和地图的视图(来自Xamarin.Forms.Maps)。

我了解到必须为每个平台使用CustomRenderer来添加自定义行为。我想要实现的是添加一个LocationManager / GeoLocation以通过GPS识别用户位置并用别针/标记显示他​​的位置。除此之外,我从几个人的根项目中获得了位置,这些位置也必须在地图中显示。

我是否必须使用界面导出功能或使用适当的自定义地图渲染器?

我不知道如何实现,Xamarin.Forms网站上的示例和Stackoverflow中的研究都没有提示。

这是我到目前为止的一些代码(摘录):

mockRepo.Setup(s => s.Get(It.IsAny<Func<User, bool>>())).Returns(expr => {
    User[] users = new User[] {
        new User { UserName = CorrectUserName, Password = CorrectPassword },
        new User { UserName = WrongUserName, Password = "foobar" },
    };
    return users.Where(expr).FirstOrDefault();
});

1 个答案:

答案 0 :(得分:0)

您应该使用GetLocation并声明使用LocationServices

所需的权限
[assembly: UsesPermission(Manifest.Permission.AccessFineLocation)]
[assembly: UsesPermission(Manifest.Permission.AccessCoarseLocation)]

这对于获取设备的GPS坐标并非绝对必要,但此示例将尝试为当前位置提供街道地址:

[assembly: UsesPermission(Manifest.Permission.Internet)]

将一个名为InitializeLocationManager的方法添加到活动

void InitializeLocationManager()
{
_locationManager = (LocationManager) GetSystemService(LocationService);
Criteria criteriaForLocationService = new Criteria
{
Accuracy = Accuracy.Fine
};
IList<string> acceptableLocationProviders = _locationManager.GetProviders(criteriaForLocationService, true);

if (acceptableLocationProviders.Any())
{
_locationProvider = acceptableLocationProviders.First();
}
 else
{
_locationProvider = string.Empty;
}
Log.Debug(TAG, "Using " + _locationProvider + ".");
}

LocationManager类将侦听来自设备的GPS更新,并通过事件通知应用程序。在此示例中,我们要求Android提供匹配给定Criteria集的最佳位置提供程序,并将该提供程序提供给LocationManager。

有关如何使用Xamarin表格获取当前位置的详细信息,请点击以下链接:https://developer.xamarin.com/recipes/android/os_device_resources/gps/get_current_device_location/