Android Geofencing BroadcastReceiver no activado

Actualmente estoy haciendo una aplicación de Geofencing para android, y he seguido su tutorial, pero no puedo parecen obtener el BroadcastReceiver para desencadenar correctamente.

El onAddGeofencesResult se llama, pero el BroadcastReceiver no se llama nunca. ¿Y la idea de por qué? Lo tengo para que envíe una emisión si una persona está en la geofencia por más de 5 ms, así como sale o entra en la geofencia. Hice geofences basado en coordenadas cerca de mi oficina, pero no obtengo ningún resultado al caminar a través de ellos (o de pie en ellos).

ReceiveTransitionsBroadcastReceiver.java:

import com.parse.ParseObject; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; /** * This class receives geofence transition events from Location Services, in the * form of an Intent containing the transition type and geofence id(s) that triggered * the event. */ public class ReceiveTransitionsBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context arg0, Intent arg1) { System.out.println("Hello"); ParseObject gameScore = new ParseObject("EventTest"); gameScore.put("Student", "Josh"); gameScore.put("Entered", true); gameScore.put("Class", "AndroidTest"); gameScore.saveInBackground(); } } 

Manifiesto:

 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.spotter" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="16" android:targetSdkVersion="19" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.example.spotter.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <receiver android:name="com.example.spotter.ReceiveTransitionsBroadcastReceiver" android:exported="false"/> <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" /> </application> </manifest> 

MainActivity donde instalo las geofencias:

 @Override public void onConnected(Bundle bundle) { System.out.println("Connected to LocationServices"); Geofence.Builder builder = new Geofence.Builder(); builder.setCircularRegion(41.909858, -87.649038, 100.0f) .setExpirationDuration(Geofence.NEVER_EXPIRE) .setRequestId("1") .setLoiteringDelay(5) .setTransitionTypes(Geofence.GEOFENCE_TRANSITION_ENTER | Geofence.GEOFENCE_TRANSITION_EXIT | Geofence.GEOFENCE_TRANSITION_DWELL); Geofence fence1 = builder.build(); builder.setCircularRegion(41.910359, -87.651444, 100.0f) .setExpirationDuration(Geofence.NEVER_EXPIRE) .setRequestId("2") .setTransitionTypes(Geofence.GEOFENCE_TRANSITION_ENTER | Geofence.GEOFENCE_TRANSITION_EXIT); Geofence fence2 = builder.build(); Intent intent = new Intent(this, ReceiveTransitionsBroadcastReceiver.class); PendingIntent pi = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); locationClient.addGeofences(Arrays.asList(fence1,fence2), pi, this); } 

Gracias por revisar esto, agradezco la ayuda.

EDIT: El radio de la geofencia es de 1000 metros. Conduzco alrededor de una milla de distancia y de vuelta, pero nada, así que supongo que no es la precisión que es un problema. Tenga en cuenta que el dispositivo no está activado, por lo que sólo estoy usando wifi, pero hay docenas de puntos wifi en cada geofence, que me conecto a.

Una nota importante en Google Play GeoFencing API. He descubierto que el GeoFencing nunca recupera inteligentemente las ubicaciones del hardware GPS. La API de GeoFence observará la ubicación más precisa disponible desde el sistema operativo o, si no hay una lectura de ubicación reciente disponible, hará que se calcule una ubicación desde Wifi / Cellular. (Que succiona porque celular es v imprecisa y wifi a menudo no está disponible)

Por lo tanto, para obtener resultados precisos o sensibles fuera de la Geofencing API tiene que configurar sus Geofences y, a continuación, encuesta el hardware GPS en algún intervalo, ni siquiera hacer nada con el resultado recibido, por lo que bajo la superficie de datos vale la pena OS y Geofence API.

Esto es probablemente el núcleo de por qué usted no está viendo ningún resultado. Los eventos de geofence no se activarán hasta que el sistema operativo esté 100% seguro de la acción. Así que si una lectura de la ubicación tiene una precisión de 500 metros (no es improbable cuando se utiliza la geolocalización celular) y su valla tiene un radio de 50m, nunca sería capaz de producir un evento de entrada, y tendría que ser por lo menos ~ 550m de su punto de la cerca para producir un acontecimiento de la salida.

TLDR; Encuesta el hardware GPS en un intervalo sin hacer nada con el resultado y comenzará a obtener geofences más preciso.

Stealthwang tiene razón, no puede confiar en el geofencing API porque la ubicación informada es a veces descontroladamente. Deberá realizar el filtrado de ubicaciones para garantizar un informe adecuado.

Además, tenga en cuenta que el valor de tiempo de espera es sólo un aviso. Muchas plataformas simplemente ignoran este valor por lo que si su diseño requiere actualizaciones periódicas confiables, entonces tendrá que implementar esto usted mismo.

Buena suerte w / su proyecto.

  • No encontró la clase "com.google.firebase.provider.FirebaseInitProvider"
  • Acceso dev machine localhost a través de usb
  • Android buena arquitectura
  • Cómo suspender y reanudar los hilos en android?
  • Cómo bloquear los botones de Android / teléfono de código (bloqueo de pantalla)?
  • No se puede resolver el constructor ArrayAdapter
  • cómo determinar si una conexión a Internet está actualmente disponible y activa en un dispositivo android?
  • Transmita un mensaje a todas las máquinas disponibles en WiFi
  • Administrador de alarmas de Android
  • Configuración dinámica de una altura fija para una vista de cuadrícula escalonada
  • Entero aleatorio: Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.