我在 Android 中遇到地理围栏问题。我按照https://developer.android.com/training/location/geofencing.html的说明 建立地理围栏列表,我与 LocationClient 连接,它可以工作并返回连接,我可以获得最后一个位置.. .但是当我执行时:
mLocationClient.addGeofences(InfoApp.mGeofenceList, mTransitionPendingIntent, this);
我在 onAddGeofencesResult 中没有回复。我在 logcat 中没有看到任何消息。
我使用以下代码创建地理围栏:
mUIGeofence1 = new SimpleGeofence(
infoEstablecimiento.getString("_id"),
infoEstablecimiento.getDouble("latitud"),
infoEstablecimiento.getDouble("longitud"),
(float) infoEstablecimiento.getDouble("radio"),
Geofence.NEVER_EXPIRE,
// This geofence records only entry transitions with a delay
Geofence.GEOFENCE_TRANSITION_DWELL, loiteringDelay);
首先我用 REQUEST_TYPE.ADD 调用这个函数:
public static void conexionGeofence(
REQUEST_TYPE mRequestType,
Context contexto,
SlidingFragmentActivity actividad,
GooglePlayServicesClient.ConnectionCallbacks connectionAct,
GooglePlayServicesClient.OnConnectionFailedListener connectionListener) {
// Start a request to add geofences
/*
* Test for Google Play services after setting the request type. If
* Google Play services isn't present, the proper request can be
* restarted.
*/
if (!servicesConnected(actividad)) {
return;
}
/*
* Create a new location client object. Since the current activity class
* implements ConnectionCallbacks and OnConnectionFailedListener, pass
* the current activity object as the listener for both parameters
*/
InfoApp.mLocationClient = new LocationClient(contexto, connectionAct,
connectionListener);
// If a request is not already underway
if (!InfoApp.mInProgress) {
InfoApp.mRequestType = mRequestType;
// Indicate that a request is underway
InfoApp.mInProgress = true;
// Request a connection from the client to Location Services
InfoApp.mLocationClient.connect();
} else {
/*
* A request is already underway. You can handle this situation by
* disconnecting the client, re-setting the flag, and then re-trying
* the request.
*/
}
}
我在 onConnected 中收到了响应,但是当我调用 addGeofences 时,不再收到任何响应。
@Override
public void onConnected(Bundle connectionHint) {
/*
* Choose what to do based on the request type set in removeGeofences
*/
switch (InfoApp.mRequestType) {
case ADD:
// Get the PendingIntent for the request
InfoApp.mTransitionPendingIntent = GeofenceUtils
.getTransitionPendingIntent();
Location loc = InfoApp.mLocationClient.getLastLocation();
// Send a request to add the current geofences
InfoApp.mLocationClient.addGeofences(InfoApp.mGeofenceList,
InfoApp.mTransitionPendingIntent, this);
break;
case REMOVE_LIST:
InfoApp.mLocationClient.removeGeofences(InfoApp.mGeofencesToRemove,
this);
break;
default:
break;
}
}
非常感谢!