簡體   English   中英

使用Google Play服務在Xamarin中獲取用戶位置

[英]Getting user location in Xamarin with google play services

我想在Android應用中顯示當前用戶位置,例如GMaps中的藍點。 我在網上搜索,但可能缺少一些重要的信息。

這些是我的課程派生的類或接口

public class TargetActivity : AppCompatActivity, IOnMapReadyCallback, Android.Locations.ILocationListener

這段代碼來自我的MainActivity,這是我第一次在Android上編程,所以我真的不知道從這里開始。

    public GoogleMap _map;
    public MapFragment _mapFragment;
    LocationManager locationManager;
    string provider;

    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);
        SetContentView(Resource.Layout.Target);

        _mapFragment = FragmentManager.FindFragmentById(Resource.Id.map) as MapFragment;
        if (_mapFragment == null)
        {
            GoogleMapOptions mapOptions = new GoogleMapOptions()
                .InvokeMapType(GoogleMap.MapTypeTerrain)
                .InvokeZoomControlsEnabled(false)
                .InvokeCompassEnabled(true);

            FragmentTransaction fragTx = FragmentManager.BeginTransaction();
            _mapFragment = MapFragment.NewInstance(mapOptions);
            fragTx.Add(Resource.Id.map, _mapFragment, "map");
            fragTx.Commit();


        }
        _mapFragment.GetMapAsync(this);

        if (_map != null)
        {
            _map.UiSettings.ZoomControlsEnabled = false; 
            _map.UiSettings.CompassEnabled = true;  
            _map.MapType = GoogleMap.MapTypeTerrain;   

        }

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

        Location location = locationManager.GetLastKnownLocation(provider);
        if (location == null)
        {
            System.Diagnostics.Debug.WriteLine("no location");
        }
    }

    public void OnMapReady(GoogleMap googleMap)
    {
        MarkerOptions markerOptions = new MarkerOptions();
        markerOptions.SetPosition(new LatLng(16.03, 108));
        markerOptions.SetTitle("AAAA");
        googleMap.AddMarker(markerOptions);
    }

    public void OnLocationChanged(Location location)
    {

        double lat, lng;
        lat = location.Latitude;
        lng = location.Longitude;

        MarkerOptions markerOptions = new MarkerOptions();
        markerOptions.SetPosition(new LatLng(lat, lng));
        markerOptions.SetTitle("Posizione");
        _map.AddMarker(markerOptions);

        CameraPosition.Builder builder = CameraPosition.InvokeBuilder();
        builder.Target(new LatLng(lat, lng));
        CameraPosition cameraPosition = builder.Build();
        CameraUpdate cameraUpdate = CameraUpdateFactory.NewCameraPosition(cameraPosition);
        _map.MoveCamera(cameraUpdate);

    }

public void OnProviderDisabled(string provider)
        {
            //throw new NotImplementedException();

        }

        public void OnProviderEnabled(string provider)
        {
            //throw new NotImplementedException();
        }

        public void OnStatusChanged(string provider, [GeneratedEnum] Availability status, Bundle extras)
        {
            //throw new NotImplementedException();
        }

您需要實現OnMyLocationButtonClickListenerOnMyLocationClickListener 在地圖實例上啟用位置服務,並覆蓋相關方法。 只要您有權定位,幾乎所有東西都會為您處理。 這里看看文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM