【问题标题】:In Xamarin How to get device location to use in Google Maps routes在 Xamarin 如何获取设备位置以在 Google 地图路线中使用
【发布时间】:2017-11-29 20:00:58
【问题描述】:

我正在尝试从我的应用程序中使用某种深层链接,打开带有路线的谷歌地图。 我正在使用 Xamarin 便携式,并且我正在使用此代码,它正在工作,但将路线的起始位置保持为空白。

var latDestiny = ClientMap.Latitude.ToString().Replace(",", ".");
var longiDestiny = ClientMap.Longitude.ToString().Replace(",", ".");

string destiny = "&destination=" + latDestino + "," + longiDestino;

var gMapsURL = "https://www.google.com/maps/dir/?api=1" + destiny;
GlobalLib.OpenExternalURL(gMapsURL);

我看到我需要在链接中添加类似这样的内容:

"&origin=" + myLatitude + "," + myLongitude;

但是我找到的所有获取设备位置的方法都不清楚,看起来很复杂,有人有一个很好的解决方案来找到设备的纬度和经度吗?

【问题讨论】:

标签: google-maps xamarin xamarin.forms


【解决方案1】:

试试这个想法:(我在我的应用中使用,效果很好)

在可移植项目中创建一个接口:(是的,您需要在每个平台中以不同的方式处理当前位置)

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 网址...

【讨论】:

  • 它似乎比我在互联网上找到的其他答案更简单。我会尝试然后我会接受或不接受它
猜你喜欢
  • 1970-01-01
  • 2019-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-03
  • 1970-01-01
相关资源
最近更新 更多