获取输入的地理围栏的ID

时间:2014-05-13 21:30:54

标签: java list google-maps android-geofence

我通过添加sqlite表中的坐标制作了两个地理围栏。它确实在地图上创建了地理围栏,并且确实也发生了过渡。

我的问题是所有转换都会触发相同的广播,这意味着无论我输入哪两个地理围栏,都会显示相同的通知。

如何获取特定位置的消息?

我已经使用这行代码来获取触发的围栏的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.

                    }

1 个答案:

答案 0 :(得分: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

你想要不同的东西吗?