使用 google play 服务在 Xamarin 中获取用户位置
Posted
技术标签:
【中文标题】使用 google play 服务在 Xamarin 中获取用户位置【英文标题】:Getting user location in Xamarin with google play services 【发布时间】:2018-10-09 01:31:07 【问题描述】:我想在 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();
【问题讨论】:
在OnMapReady
中,您永远不会将GoogleMap
参数分配给您的实例变量_map
【参考方案1】:
您需要实现OnMyLocationButtonClickListener
和OnMyLocationClickListener
。在您的地图实例上启用位置服务并覆盖相关方法。只要您拥有定位权限,几乎所有事情都会为您处理好。看看文档here
【讨论】:
以上是关于使用 google play 服务在 Xamarin 中获取用户位置的主要内容,如果未能解决你的问题,请参考以下文章
不支持Google Play服务怎么办 Google Play服务不支持解决方法
Google PlayGoogle Play 服务框架安装 ( 安装 Google Play 服务框架 | 安装 Google Play 服务 | 安装 Google Play 商店 )