Uso de FusedLocationApi con Xamarin 3
Tuve muchos problemas cuando intenté usar FusedLocationApi de mi actividad de Xamarin. El enfoque utilizado por el código que aparece aquí Ubicación Xamarin ha sido marcado como obsoleto, por lo que no compilar. Mi implementación es la siguiente. La pregunta que tengo es, si esta es la manera de hacerlo o si estoy pasando por alto algo mucho más fácil? El LocationHandler es utilizado por mi actividad, por ejemplo OnCreate, OnResume, OnPause llamar a los métodos de conexión y desconexión. El método OnChangedLocation debería, por supuesto, hacer algo más inteligente.
using System; using Android.Gms.Common; using Android.Gms.Common.Apis; using Android.Gms.Location; using Android.Locations; using Android.Util; using Android.OS; using Android.Content; namespace WithKidsAndroid { public class LocationHandler : Java.Lang.Object, IGoogleApiClientConnectionCallbacks, IGoogleApiClientOnConnectionFailedListener, Android.Gms.Location.ILocationListener { private IGoogleApiClient _googleAPI; private Context _context; public LocationHandler(Context context) { if (context == null) { throw new ArgumentNullException("context"); } else { _context = context; } initializeGoogleAPI(); LocRequest = new LocationRequest(); } public LocationHandler(Context context, LocationRequest request) { if (context == null) { throw new ArgumentNullException("context"); } else { _context = context; } initializeGoogleAPI(); LocRequest = request; } public LocationRequest LocRequest { get; set; } public void connectGoogleAPI() { System.Diagnostics.Debug.Assert(_googleAPI != null); if (!_googleAPI.IsConnectionCallbacksRegistered(this)) { _googleAPI.RegisterConnectionCallbacks(this); } if (!_googleAPI.IsConnectionFailedListenerRegistered(this)) { _googleAPI.RegisterConnectionFailedListener(this); } if (!_googleAPI.IsConnected || !_googleAPI.IsConnecting) { _googleAPI.Connect(); } } public void disconnectGoogleAPI() { if (_googleAPI != null && _googleAPI.IsConnected) { if (_googleAPI.IsConnectionCallbacksRegistered(this)) { _googleAPI.UnregisterConnectionCallbacks(this); } if (_googleAPI.IsConnectionFailedListenerRegistered(this)) { _googleAPI.UnregisterConnectionFailedListener(this); } _googleAPI.Disconnect(); } } public void OnConnected(Bundle connectionHint) { Log.Debug("LocationHandler", "logged connected", connectionHint); if (LocRequest == null) { throw new Exception("Unknown location request. Set this first by using property LocRequest or constructor."); } LocationServices.FusedLocationApi.RequestLocationUpdates(_googleAPI, LocRequest, this); } public void OnConnectionSuspended(int cause) { Log.Debug("LocationHandler", "logged OnConnectionSuspended", cause); } public void OnConnectionFailed(ConnectionResult result) { Log.Debug("LocationHandler", "logged OnConnectionFailed", result); } public void OnLocationChanged(Location location) { Log.Debug("LocationHandler", "logged location changed: " + location.ToString()); } private void initializeGoogleAPI() { int queryResult = GooglePlayServicesUtil.IsGooglePlayServicesAvailable(_context); if (queryResult == ConnectionResult.Success) { _googleAPI = new GoogleApiClientBuilder(_context).AddApi(LocationServices.Api).AddConnectionCallbacks(this).AddOnConnectionFailedListener(this).Build(); } else { var errorString = String.Format("There is a problem with Google Play Services on this device: {0} - {1}", queryResult, GooglePlayServicesUtil.GetErrorString(queryResult)); Log.Error("WithKidsAndroid.LocationHandler", errorString); throw new Exception(errorString); } } } }
- Xamarin.IOS Error - No se puede resolver la referencia: C: / Archivos de programa (x86) /../ Xamarin.iOS / v1.0 / Facades / System.Private.CoreLib.InteropServices.dll
- Xamarin: comparación con el SDK nativo y los marcos basados en JS
- Error de la aplicación multiplataforma de Xamarin Studio
- Android tostado en el iPhone?
- ¿Es posible crear una biblioteca compartida multiplataforma con MonoDroid y MonoTouch que pueden ser utilizados por desarrolladores que no sean Mono?
- Consulta del cliente de Azure Mobile Service que no devuelve el control a Xamarin Form android client app
- Xamarin Android, control personalizado y diseñador de Visual Studio
- Sugerencias para entrar en el desarrollo móvil - iPhone SDK puro, Android SDK, Mono Touch o Titanium?
- Desarrollar una aplicación C # para Windows Mobile, Android y iPhone
- Mono para iOS / Android ¿Abierto o cerrado? ¿Pago o gratis?
- No puedo ejecutar la aplicación después de actualizar Xamarin.Forms
- Targeting / Developing para múltiples plataformas móviles con un solo lenguaje de programación (C #)? ¿Coste-beneficio?
- SQLite.SQLiteException lanzado en Xamarin.Android al intentar crear una tabla
Supongo que no. Voy a cerrar la pregunta, pero no eliminar la pregunta ya que la gente puede encontrar un ejemplo de LocationServices que funcionan.
- Alternativa de Android a java.awt (BufferedImage y Raster)
- Android spinner no tiene rizado en el botón en sí, sólo sus opciones