2014-05-13 48 views
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. 

        } 

回答

3

使用

List <Geofence> triggerList = getTriggeringGeofences(intent); 

String[] triggerIds = new String[geofenceList.size()]; 

for (int i = 0; i < triggerIds.length; i++) { 
    triggerIds[i] = triggerList.get(i).getRequestId(); 
} 

從Android文檔here拍攝。

你想要一些不同的東西嗎?

+0

@ user3568345你解決了這個問題了嗎? – antroid