试试这个想法:(我在我的应用中使用,效果很好)
在可移植项目中创建一个接口:(是的,您需要在每个平台中以不同的方式处理当前位置)
namespace YourProject
{
public interface ILibNative
{
Position ReturnDevicePosition();
}
}
然后,创建一个派生 iOS 和 Android 项目内部接口的类:
安卓:
[assembly: Dependency(typeof(LibNative_DROID))]
namespace YourProject.Droid
{
public class LibNative_DROID : ILibNative
{
public LibNative_DROID()
{
}
public Position ReturnDevicePosition()
{
Position myPosition = new Position();
try
{
Accuracy DesiredAccuracy = Accuracy.Fine;
var locationManager = (LocationManager)Android.App.Application.Context.GetSystemService(Context.LocationService);
if (locationManager.AllProviders.Count > 0)
{
var criteria = new Criteria
{
Accuracy = DesiredAccuracy
};
var provider = locationManager.GetBestProvider(criteria, true);
myPosition = new Position(locationManager.GetLastKnownLocation(provider).Latitude, locationManager.GetLastKnownLocation(provider).Longitude);
}
return myPosition;
}
catch
{
return myPosition;
}
}
}
}
iOS:
[assembly: Dependency(typeof(LibNative_iOS))]
namespace YourProject.iOS
{
public class LibNative_iOS : ILibNative
{
public LibNative_iOS()
{
}
public Position ReturnDevicePosition()
{
Position myPosition = new Position();
try
{
if (CLLocationManager.LocationServicesEnabled)
{
CLLocationManager locationManager = new CLLocationManager();
locationManager.RequestWhenInUseAuthorization();
var location = locationManager.Location;
myPosition = new Position(location.Coordinate.Latitude, location.Coordinate.Longitude);
}
return myPosition;
}
catch
{
return myPosition;
}
}
}
}
不要忘记在清单(fine_location、coarse_location、gps、互联网等)中请求启用对您的位置的访问权限
然后,在这样做之后,您可以这样做:
var MyPosition = new Position();
MyPosition = DependencyService.Get<ILibNative>().ReturnDevicePosition();
var myLatitude = MyPosition.Latitude.ToString().Replace(",", ".");
var myLongitude = MyPosition.Longitude.ToString().Replace(",", ".");
string startingPoint = "&origin=" + myLatitude + "," + myLongitude;
现在,只需将“startingPoint”添加到您的 googleMaps 网址...