2017-11-06 4 views
1

Sir, in meiner Anwendung bekomme ich Benutzer Ort (wie blue dot auf), aber es wird nach einer Sekunde geändert oder wie ich auf GPS Symbol auf der Karte klicken würde.Benutzer aktuellen Standort ändert sich auf Google Map Xamarin.Android

Weiß nicht, wo ich falsch mache. Bitte schlagen Sie deshalb Anregungen dazu vor.

Aktivität Code:

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(); 

      //gooMap.MyLocationEnabled = true; 
      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; 
      gooMap.MyLocationEnabled = true; 

      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) 
     { 
      //gooMap.MyLocationEnabled = true; 

      Double lat, lng; 
      lat = location.Latitude; 
      lng = location.Longitude; 
      //TextView txtv = FindViewById<TextView>(Resource.Id.txt1); 
      //txtv. = "#000000"; 
      //txtv.Text = "Lattitude : " + lat.ToString() + ", Long : " + lng.ToString(); 
      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); 

      //LatLng latlng = new LatLng(Convert.ToDouble(27.50801), Convert.ToDouble(82.02707)); 

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

Manifest.xml:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.smvdappdev.smvdappdev" android:versionCode="1" android:versionName="1.0"> 
    <uses-sdk android:minSdkVersion="16" /> 
    <application android:label="smvdappdev"> 
    <meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="AIzaSyBjeg79HAm8MBNisbQbVHvtWWaV0IuOWMA" /> 
    <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" /> 
    </application> 

    <user-permission android:name="com.smvdappdev.smvdappdev.permission.MAPS_RECEIVE" android:protectionLevel="signature" /> 
    <uses-permission android:name="com.smvdappdev.smvdappdev.permission.MAPS_RECEIVE" /> 
    <uses-permission android:name="com.google.android.providers.gsf.permisson.READ_GSERVICES" /> 
    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 

<!-- Google Maps for Android v2 will cache map tiles on external storage --> 

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

<!-- Google Maps for Android v2 needs this permission so that it may check the connection state as it must download data --> 

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 

<!-- These are optional, but recommended. They will allow Maps to use the My Location provider. --> 

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 

</manifest> 
+0

Sie könnten verweisen: https://stackoverflow.com/questions/37629236/android-google-maps-api-gps-location-is-changing-even-when-device-is-at-the-same –

+0

Sir, es gibt keine endgültige Schlussfolgerung für den vorgeschlagenen Thread. –

+0

Entschuldigen Sie die Unannehmlichkeiten. Würden Sie gerne Ihr Projekt teilen, das das Problem reproduzieren kann? –

Antwort

1

Ändern der Netzwerkkonfiguration Form Wifi-Mobile data sollte dieses Problem lösen.

Verwandte Themen