ubicaciĆ³n ubicacion tiempo studio real posicionamiento obtener localizacion geolocalizacion geografica example con compartir actual android geolocation react-native

ubicacion - obtener posicionamiento android



La geolocalizaciĆ³n de Android nativa de React (1)

Necesito detectar la geolocalización del usuario en Android nativo de React, pero la implementación actual solo admite iOS. No he encontrado tutoriales ni preguntas relacionadas en ninguna parte.

Intenté crear mi propio componente nativo de Android para esto. Lo he intentado con el emulador (estableciendo algunas coordenadas a través de la línea de comandos) y con un teléfono, pero no hay un icono de gps en la barra de acciones y la devolución de llamada de reacción no tiene datos.

Intento obtener la última ubicación conocida de inmediato y también estoy configurando un detector de eventos para las actualizaciones.

public class GeoLocation extends ReactContextBaseJavaModule implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener { protected static final String TAG = "GeoLocation"; protected GoogleApiClient mGoogleApiClient; protected Location mLastLocation; public GeoLocation(ReactApplicationContext reactContext) { super(reactContext); buildGoogleApiClient(); } @Override public String getName() { return "GeoLocation"; } protected synchronized void buildGoogleApiClient() { mGoogleApiClient = new GoogleApiClient.Builder(getReactApplicationContext()) .addConnectionCallbacks(this) .addOnConnectionFailedListener(this) .addApi(LocationServices.API) .build(); mGoogleApiClient.connect(); } @Override public void onConnected(Bundle connectionHint) { mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient); //WritableMap params = Arguments.createMap(); //Can I use ConcurrentHashMap instead of WritableMap? ConcurrentHashMap<String, String> params = new ConcurrentHashMap(); params.put("lastLocation", mLastLocation.toString()); sendEvent(getReactApplicationContext(), "geoCoordsChanged", params); } @Override public void onConnectionFailed(ConnectionResult result) { Log.i(TAG, "Connection failed: ConnectionResult.getErrorCode() = " + result.getErrorCode()); } @Override public void onConnectionSuspended(int cause) { mGoogleApiClient.connect(); } @ReactMethod public void getLastLocation(Callback success,Callback err){ try { String msg = "No location found yet"; if(mLastLocation != null){ msg = mLastLocation.toString(); } success.invoke(msg); } catch (Exception e) { err.invoke(e.getMessage()); } } private void sendEvent(ReactContext reactContext, String eventName, @Nullable ConcurrentHashMap<String, String> params) { try { reactContext .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class) .emit(eventName, params); } catch(Exception e){ } }

Permisos:

<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.SEND_SMS"/> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <application android:allowBackup="true" android:label="@string/app_name" android:icon="@mipmap/ic_launcher" android:theme="@style/AppTheme"> <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />

No he encontrado nada relevante de los registros de logcat tampoco. Cualquier consejo sobre qué es lo que está mal con este código o cualquier tipo de solución para obtener geocoordinates sería genial.


ACTUALIZACIÓN : suspiro. Hablé pronto Es parte de 0.15.0: https://github.com/facebook/react-native/releases/tag/v0.15.0

El módulo oficial parece que aún no tiene código abierto (Ver: Problemas conocidos ), pero el hecho de que haya documentación para usarlo con Android sugiere que aparecerá algún día ... ¿pronto? Mientras tanto, esto es lo que tengo un mes después y después de googlear un poco: