Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


API de geocodificación de Android BroadcastReceiver no activado

Estoy tratando de usar la api geofencing de los servicios de Google Play, pero no puedo lograr que mi receptor de difusión dispare su método onReceive() .

Parece que respeto todo lo que se necesita para que funcione, pero no tengo ningún evento de transición.

  • Cómo determinar cuándo Fragmento se vuelve visible en ViewPager
  • La fusión de manifiesto falló: uses-sdk: minSdkVersion 10 no puede ser menor que la versión L declarada en la biblioteca com.android.support:appcompat-v7:21.0.0-rc1
  • ¿Cómo usar SQLiteOpenHelper con la base de datos en sd-card?
  • StartLeScan con 128 UUIDs de bits no funciona en la implementación BLE de Android nativa
  • Cómo obtener una referencia a LocationManager dentro de un fragmento
  • Personalización del color de la flecha 'atrás' en Actionmode con appcompat-v7
    • Incluyo los servicios de Google Play en mis dependencias
    • Solicito el permiso ACCESS_FINE_LOCATION
    • Registro mi BroadcastReceiver con el valor exportado establecido en "true" (algunos dicen que es necesario) en mi Manifest
    • Añado un geofence grande en la localización exacta donde estoy (lo validé con Google Maps en mi teléfono celular) con ambos tipos de la transición y ninguna expiración
    • Lo intenté con una localización exacta simulada en el medio de la geofence, y otra fuera de la geofence 10 segundos más tarde (y me aseguré de que la ACCESS_MOCK_LOCATION ACCESS_MOCK_LOCATION estuviera presente)
    • Verifiqué que la localización de mi teléfono móvil estaba encendido y su modo fue fijado a la alta exactitud
    • Verifiqué la conexión a internet
    • He intentado con y sin desconectar el LocationClient después de agregar el geofence

    Pero aún así, obtengo una devolución de llamada onAddGeofencesResult() satisfactoria, pero no onReceive() devolución de llamada onReceive() . Lo intenté con un Nexus 5 y un Nexus 7 y ambos fallan al activar las transiciones de geofence.

    También intenté la muestra en https://developer.android.com/training/location/geofencing.html , pero su comportamiento era idéntico.

    Aquí está mi clase BroadcastReceiver :

     public class GeofencesReceiver extends BroadcastReceiver implements ConnectionCallbacks, OnConnectionFailedListener, OnAddGeofencesResultListener { private final static String TAG = "GeofencesReceiver"; private Context context = null; private LocationClient locationClient = null; /** * An empty constructor is needed by the manifest. */ @SuppressWarnings("unused") public GeofencesReceiver(){} public GeofencesReceiver(Context context){ this.context = context; locationClient = new LocationClient(context, this, this); locationClient.connect(); } @Override public void onConnected(Bundle bundle) { new Thread(new Runnable() { @Override public void run() { List<Geofence> geofences = getGeofences(); if(geofences.size() > 0){ Intent geofenceBroadcastReceiverIntent = new Intent(context, GeofencesReceiver.class); PendingIntent pi = PendingIntent.getBroadcast(context, 0, geofenceBroadcastReceiverIntent, PendingIntent.FLAG_UPDATE_CURRENT); locationClient.addGeofences(geofences, pi, GeofencesReceiver.this); }else Log.w(TAG, "No GPS zone found"); } }).start(); } private List<Geofence> getGeofences(){ Vector<Geofence> geofences = new Vector<Geofence>(); Geofence geofence = new Geofence.Builder() .setRequestId("1") .setTransitionTypes(Geofence.GEOFENCE_TRANSITION_ENTER | Geofence.GEOFENCE_TRANSITION_EXIT) .setCircularRegion(45.2676018, -72.1572185, 100) .setExpirationDuration(Geofence.NEVER_EXPIRE) .build(); geofences.add(geofence); return geofences; } @Override public void onDisconnected() { Log.d(TAG, "onDisconnected"); } @Override public void onAddGeofencesResult(int i, String[] strings) { if(i != LocationStatusCodes.SUCCESS) Log.e(TAG, "Failed to add geofences"); else Log.d(TAG, "Geofences successfully added"); locationClient.disconnect(); } @Override public void onConnectionFailed(ConnectionResult connectionResult) { Log.e(TAG, "onConnectionFailed"); } @Override public void onReceive(Context context, Intent intent) { Log.d(TAG, "onReceive"); if(LocationClient.hasError(intent)){ int errorCode = LocationClient.getErrorCode(intent); Log.e(TAG, "Location Services error: " + Integer.toString(errorCode)); return; } int transitionType = LocationClient.getGeofenceTransition(intent); if(transitionType == Geofence.GEOFENCE_TRANSITION_ENTER || transitionType == Geofence.GEOFENCE_TRANSITION_EXIT) { List<Geofence> triggerList = LocationClient.getTriggeringGeofences(intent); for(Geofence geofence : triggerList){ Log.d(TAG, (transitionType == Geofence.GEOFENCE_TRANSITION_ENTER ? "Entering" : "Exiting") + " GPS zone " + geofence.getRequestId()); } }else{ Log.e(TAG, "Geofence transition error: " + transitionType); } } } 

    En mi Manifiesto, tengo las siguientes líneas (no en esa estructura)

     <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <receiver android:name="novom.anyware.anywaresdk.GeofencesReceiver" android:exported="true" /> <meta-data android:name="com.google.android.gms.version" android:value="4323000" /> 

    Y en mi archivo build.gradle, incluyo los servicios como este

     dependencies { compile 'com.google.android.gms:play-services:4.3.23' } 

    He pasado todo el día tratando de averiguar por qué no funciona … Desde Logcat he encontrado esas líneas, pero no estoy seguro de si están relacionados con el problema, ya que no encuentro ninguna publicación en Google sobre esos errores Con Geofencing.

     04-07 09:01:14.631 1160-1319/? I/GCoreUlr﹕ Successfully inserted location 04-07 09:01:14.631 1160-1319/? I/GCoreUlr﹕ Not calling LocationReportingService, hasMoved: true, elapsed millis: 580166, request: Phone 04-07 09:02:16.481 1160-1319/? I/GCoreUlr﹕ Successfully inserted location 04-07 09:02:16.501 1160-1319/? I/GCoreUlr﹕ Starting service, intent=Intent { cmp=com.google.android.gms/com.google.android.location.reporting.LocationReportingService }, extras=null 04-07 09:02:16.571 1210-1252/? W/GLSUser﹕ GoogleAccountDataService.getToken() 04-07 09:02:16.601 1160-3780/? I/qtaguid﹕ Failed write_ctrl(u 69) res=-1 errno=22 04-07 09:02:16.601 1160-3780/? I/qtaguid﹕ Untagging socket 69 failed errno=-22 04-07 09:02:16.601 1160-3780/? W/NetworkManagementSocketTagger﹕ untagSocket(69) failed with errno -22 04-07 09:02:16.601 1160-3780/? I/imp﹕ I/O exception (org.apache.http.NoHttpResponseException) caught when processing request: The target server failed to respond 04-07 09:02:16.601 1160-3780/? I/imp﹕ Retrying request 04-07 09:02:17.501 1160-6156/? I/GCoreUlr﹕ Starting service, intent=Intent { act=com.google.android.location.reporting.ACTION_UPDATE_ACTIVE_STATE cmp=com.google.android.gms/com.google.android.location.reporting.service.DispatchingService }, extras=null 04-07 09:02:17.511 1160-6156/? I/GCoreUlr﹕ Batch Location Update succeeded for account account#7# 04-07 09:02:17.571 1160-1319/? I/GCoreUlr﹕ Ensuring that reporting is active for [account#7#] 

    Si nadie me puede ayudar, me temo que voy a implementar mi propio algoritmo geofencing con el LocationManager registrado con el GPS_PROVIDER, y esto va a drenar la batería de mis usuarios …

  • Android: tener autoridad de proveedor en el proyecto de la aplicación
  • Crear un texto tachado en Android?
  • Convierta java.net.URI a android.net.Uri
  • Índice de matriz de Android ListView fuera de límites después del filtro
  • ¿Cómo hacer que el agente api.ai aprenda algo dinámicamente?
  • ¿Pueden solicitar permisos sincrónicamente en el modelo de permisos de ejecución de Android Marshmallow (API 23)?
  • One Solution collect form web for “API de geocodificación de Android BroadcastReceiver no activado”

    En primer lugar, ¿se aseguró de que sus coordenadas son las correctas? Tuve un problema muy similar al jugar con geofencing y me tomó un tiempo para darse cuenta de mis coordenadas fueron simplemente invertido.

    Huelga decir que me sentí estúpido.

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.