package com.eteng.geolocation.baidu; import com.baidu.location.BDLocation; import com.baidu.location.BDLocationListener; import com.baidu.location.LocationClient; import com.baidu.location.LocationClientOption; import com.baidu.location.LocationClientOption.LocationMode; import com.eteng.geolocation.w3.PositionOptions; import android.content.Context; public class BDGeolocation { private String TAG = "BDGeolocation"; private LocationClient client; public static final String COORD_BD09LL = "bd09ll"; public static final String COORD_BD09 = "bd09"; public static final String COORD_GCJ02 = "gcj02"; private BDLocationListener listener; BDGeolocation(Context context) { client = new LocationClient(context); } private void setOptions(PositionOptions options) { // set default coorType String coorType = options.getCoorType(); if (coorType == null || coorType.trim().isEmpty()) { coorType = COORD_GCJ02; } // set default locationMode LocationMode locationMode = LocationMode.Battery_Saving; if (options.isEnableHighAccuracy()) { locationMode = LocationMode.Hight_Accuracy; } LocationClientOption bdoptions = new LocationClientOption(); bdoptions.setCoorType(coorType); bdoptions.setLocationMode(locationMode); client.setLocOption(bdoptions); } public boolean getCurrentPosition(PositionOptions options, final BDLocationListener callback) { listener = new BDLocationListener() { @Override public void onReceiveLocation(BDLocation location) { callback.onReceiveLocation(location); clearWatch(); } }; setOptions(options); client.registerLocationListener(listener); client.start(); return true; } public boolean watchPosition(PositionOptions options, BDLocationListener callback) { listener = callback; setOptions(options); client.registerLocationListener(listener); client.start(); return true; } public boolean clearWatch() { client.stop(); client.unRegisterLocationListener(listener); listener = null; return true; } }