2014年3月3日月曜日

GeoFenceの解除

GeoFenceの解除は次のような手順で行います。

1. LocationClientクラスのconnectメソッドをコールして、Location Serviceに接続
2. 接続完了後、removeGeofencesメソッドをコールして、GeoFenceを解除
3. 解除結果はOnRemoveGeofencesResultListenerリスナーで受け取る

removeGeofencesメソッドは2種類あり、GeoFenceのIDを指定(リクエストID)するメソッドとPendingIntentを指定するメソッドがあります。

public void removeGeofences(List<String> geofenceRequestIds,
                            LocationClient.OnRemoveGeofencesResultListener listener)

public void removeGeofences(PendingIntent pendingIntent,
                            LocationClient.OnRemoveGeofencesResultListener listener)


次はGeoFenceのIDを指定(リクエストID)して解除を行うプログラムです。

    @Override
    public void onConnected(Bundle bundle) {
        super.onConnected(bundle);

        Bundle fragmentBundle = getArguments();
        ArrayList<GeoFenceData> list = fragmentBundle.getParcelableArrayList(GEOFENCE_DATA);

        List<String> idList = new ArrayList<String>();
        for (GeoFenceData data : list) {
            idList.add(data.getId());
        }

        getLocationClient().removeGeofences(idList, mOnRemoveGeofencesResultListener);

    }


指定するクラスにより、OnRemoveGeofencesResultListenerリスナーの呼ばれるメソッドが異なります。

メソッド内容
onRemoveGeofencesByPendingIntentResultGeoFenceのID指定による削除用
onRemoveGeofencesByRequestIdsResultPendingIntent指定による削除用


次はonRemoveGeofencesByRequestIdsResultメソッドで結果を受け取るプログラムです。

    private OnRemoveGeofencesResultListener mOnRemoveGeofencesResultListener = new OnRemoveGeofencesResultListener() {

        @Override
        public void onRemoveGeofencesByPendingIntentResult(int statusCode,
                PendingIntent pendingIntent) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onRemoveGeofencesByRequestIdsResult(int statusCode, String[] geofenceRequestIds) {
            switch (statusCode) {
                case LocationStatusCodes.SUCCESS:
                    Toast.makeText(getActivity(), "LocationStatusCodes.SUCCESS", Toast.LENGTH_LONG)
                            .show();
                    break;
                case LocationStatusCodes.GEOFENCE_NOT_AVAILABLE:
                case LocationStatusCodes.GEOFENCE_TOO_MANY_GEOFENCES:
                case LocationStatusCodes.GEOFENCE_TOO_MANY_PENDING_INTENTS:
                case LocationStatusCodes.ERROR:
                    break;
                default:
                    break;
            }
            mLocationClient.disconnect();
            mOnGeoFenceRemoverInterface.onGeoFenceRemoved();
        }

    };

0 件のコメント:

コメントを投稿