使用Xamarin.Android在Google Map上标记移动位置

时间:2017-11-03 06:13:28

标签: google-maps xamarin xamarin.android

爵士

Xamarin上使用Visual Studio 2017开发了一个应用程序,当用户在他的Android设备上打开current location然后标记该位置时,我需要找到移动设备的Location Google Map使用MarkerOption。为此,我按照以下视频https://www.youtube.com/watch?v=rCZN1c2azyE中的指导执行了相应步骤。但是没有在地图上获得当前位置。

以下是我的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.Gms.Maps;
using Android.Locations;
using Android.Util;
using Android.Gms.Maps.Model;

namespace smvdappdev
{
    [Activity(Label = "LOCATION MAP")]
                                                 //for google map,    for gps location
    public class UserLocationMap_Act : Activity, IOnMapReadyCallback, ILocationListener
    {
        //Map variable
        private GoogleMap gooMap;
        //Location
        LocationManager locManager;
        String provider;

        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);

            // Create your application here
            SetContentView(Resource.Layout.UserLocationMap);

            //Back Button
            ActionBar.SetDisplayHomeAsUpEnabled(true);

            //Method for Map
            SetUpMap();

            locManager = (LocationManager)GetSystemService(Context.LocationService);
            provider = locManager.GetBestProvider(new Criteria(), false);

            Location location = locManager.GetLastKnownLocation(provider);
            if (location == null)
            {
                System.Diagnostics.Debug.WriteLine("No location available!");
            }
        }

        public override bool OnOptionsItemSelected(IMenuItem item)
        {
            switch (item.ItemId)
            {
                case Android.Resource.Id.Home:
                    Finish();
                    return true;

                default:
                    return base.OnOptionsItemSelected(item);
            }
        }

        //for setting map on fragment placed on  activity page
        private void SetUpMap()
        {
            if (gooMap == null)
            {
                FragmentManager.FindFragmentById<MapFragment>(Resource.Id.fragment1).GetMapAsync(this);
            }
        }

        //to draw map on map display view
        public void OnMapReady(GoogleMap googleMap)
        {
            this.gooMap = googleMap;

            //LatLng latlng = new LatLng()
            //MarkerOptions mo = new MarkerOptions();
            //mo.SetPosition(new LatLng(Convert.ToDouble(32.73), Convert.ToDouble(74.86)));
            //mo.SetTitle("Civil Secretarait Jammu");
            //googleMap.AddMarker(mo);

            googleMap.UiSettings.CompassEnabled = true;
            googleMap.UiSettings.ZoomControlsEnabled = true;
            googleMap.MoveCamera(CameraUpdateFactory.ZoomIn());
            //throw new NotImplementedException();
        }

        //*** Here all code for getting location via GPS
        protected override void OnResume()
        {
            base.OnResume();
            provider = LocationManager.GpsProvider;

            //if (locManager.IsProviderEnabled(provider))
            //{
                locManager.RequestLocationUpdates(provider, 2000, 1, this);
            //}
            //else
            //{
            //    Log.Info(tag, provider + " is not available. Does the device have location services enabled?");
            //}
        }

        protected override void OnPause()
        {
            base.OnPause();
            locManager.RemoveUpdates(this);
        }

        public void OnProviderEnabled(string provider)
        {
        }

        public void OnProviderDisabled(string provider)
        {
        }

        public void OnStatusChanged(string provider, Availability status, Bundle extras)
        {
        }

        public void OnLocationChanged(Location location)
        {  
            Double lat, lng;
            lat = location.Latitude;
            lng = location.Longitude;
            MarkerOptions mo = new MarkerOptions();
            mo.SetPosition(new LatLng(lat, lng));
            //Toast.MakeText(this, "Latitude:" + lat.ToString() + ", Longitude:" + lng.ToString(), ToastLength.Long).Show();
            mo.SetTitle("You are here!");
            gooMap.AddMarker(mo);

            CameraPosition.Builder builder = CameraPosition.InvokeBuilder();
            builder.Target(new LatLng(lat, lng));
            CameraPosition camPos = builder.Build();
            CameraUpdate camUpdate = CameraUpdateFactory.NewCameraPosition(camPos);
            gooMap.MoveCamera(camUpdate);
        }
    }
}

1 个答案:

答案 0 :(得分:1)

您可以使用gooMap.MyLocationEnabled = true。您需要先检查并请求位置权限才能使其生效。

MyLocationEnabled设置为true时,它会显示一个精确的圆圈和一个显示您所在位置的蓝点。