2
我已經做了兩個geofences通過添加從sqlite表的座標。它確實在地圖上創建了地理柵欄,並且也發生了轉場。獲取輸入的geofence的ID
我的問題是,所有的轉換觸發同樣的廣播,這意味着不論我進入哪兩個地理圍欄,它顯示了相同的通知。
如何獲取位置特定的消息?
我已經使用這行代碼來獲取觸發圍欄的ID,這正常工作,但它也給不需要的東西,如經度,緯度和半徑。我如何提取只有這個ID?
List<Geofence> ab = LocationClient.getTriggeringGeofences(intent);
這是代碼的相關部分。
@Override
public void onConnected(Bundle arg0) {
mClient.requestLocationUpdates(mRequest, this);
SQLiteDatabase db = database.getWritableDatabase();
String[] columns = {PromoDatabase.LID,PromoDatabase.lRestuarantID,PromoDatabase.lBranchID,PromoDatabase.Latitude,PromoDatabase.Longitude};
Cursor cursor = db.query(PromoDatabase.LOCATION_TABLE, columns, null, null, null, null, null);
String RestuarantName = null;
while(cursor.moveToNext()) //create the two geofences with with help of sqlite table
{
String LocationID = cursor.getString(0);
String RestuarantID = cursor.getString(1);
double latitude = cursor.getDouble(3);
double longitude = cursor.getDouble(4);
RestuarantName = getData(RestuarantID); //get the restuarant name by giving the RestuarantID
float radius = 800;
// Build a Geofence
Geofence fence = new Geofence.Builder()
.setRequestId(LocationID)
.setCircularRegion(latitude, longitude, radius)
.setTransitionTypes(Geofence.GEOFENCE_TRANSITION_ENTER)
.setExpirationDuration(Geofence.NEVER_EXPIRE)
.build();
mList.add(fence);
googleMap.addMarker(new MarkerOptions()
.position(new LatLng(latitude, longitude))
.title(RestuarantName+": Fence " + LocationID)
.snippet("Radius: " + radius)).showInfoWindow();
circleOptions = new CircleOptions()
.center(new LatLng(latitude, longitude))
.radius(radius)
.fillColor(0x40ff0000)
.strokeColor(Color.TRANSPARENT)
.strokeWidth(2);
googleMap.addCircle(circleOptions);
}
// Method 2: Using Broadcast
Intent intent = new Intent();
intent.setAction(GeofenceEventReceiver.GEOFENCE_EVENTS); // Specify the action, a.k.a. receivers
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.putExtra("Location", "KFC");
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
// Send out the Geofence request
mClient.addGeofences(mList, pendingIntent, this);
}
// Broadcast receiver used to receive broadcast sent from the GeofenceIntentService
public class GeofenceEventReceiver extends BroadcastReceiver {
public static final String GEOFENCE_EVENTS = "com.Drogo.proto.GeofenceEvents";
@Override
public void onReceive(Context context, Intent intent) {
String locationInfo = "Arraived at " + intent.getStringExtra("Location");
List<Geofence> BreachedGeofence = LocationClient.getTriggeringGeofences(intent);
Toast.makeText(context, locationInfo + BreachedGeofence, Toast.LENGTH_LONG).show();
notifyMe(context,intent, locationInfo); //this will basically give me a notification through the notification manager.
}
@ user3568345你解決了這個問題了嗎? – antroid