获取用户当前位置,需要配合定位SDK一起使用,本人在使用过程中,发现新旧版本的定位SDK差别很大,本人推荐使用旧版本的SDK,因为网上的许多教程都是使用旧版本的SDK进行讲解的,网上下载的源码大多数也是基于旧版本的,而且高德官方的文档更新的不是很及时,SDK是新版本的,但是文档确实旧版本的,让你开发很无语。
旧版本SDK: http://pan.baidu.com/s/1pKujpNX
package rfidlib.com.fangaiwujiwu.ui;
import android.app.Activity; import android.location.Location; import android.os.Bundle; import com.amap.api.location.AMapLocation; import com.amap.api.location.AMapLocationListener; import com.amap.api.location.LocationManagerProxy; import com.amap.api.location.LocationProviderProxy; import com.amap.api.maps.AMap; import com.amap.api.maps.CameraUpdateFactory; import com.amap.api.maps.LocationSource; import com.amap.api.maps.MapView; import com.amap.api.maps.model.BitmapDescriptorFactory; import com.amap.api.maps.model.MyLocationStyle; import rfidlib.com.fangaiwujiwu.R; public class SearchActivity extends Activity implements LocationSource,AMapLocationListener { private static final String TAG ="SearchActivity"; private MapView mapView; private AMap aMap; private LocationSource.OnLocationChangedListener mListener; private LocationManagerProxy mAMapLocationManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_search); initView(savedInstanceState); } private void initView(Bundle savedInstanceState){ mapView = (MapView) findViewById(R.id.map); mapView.onCreate(savedInstanceState);// 必须要写 if(aMap==null){ aMap = mapView.getMap(); } aMap.setLocationSource(this);// 设置定位监听 aMap.getUiSettings().setMyLocationButtonEnabled(true);// 设置默认定位按钮是否显示 aMap.setMyLocationEnabled(true);// 设置为true表示显示定位层并可触发定位,false表示隐藏定位层并不可触发定位,默认是false // 自定义系统定位蓝点 MyLocationStyle myLocationStyle = new MyLocationStyle(); // 自定义定位蓝点图标 myLocationStyle.myLocationIcon(BitmapDescriptorFactory.fromResource(R.drawable.location_marker)); // 将自定义的 myLocationStyle 对象添加到地图上 aMap.setMyLocationStyle(myLocationStyle); // 构造 LocationManagerProxy 对象 mAMapLocationManager = LocationManagerProxy.getInstance(getApplicationContext()); } @Override public void onResume() { super.onResume(); mapView.onResume(); } @Override public void onPause() { super.onPause(); mapView.onPause(); } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); mapView.onSaveInstanceState(outState); } @Override public void onDestroy() { super.onDestroy(); mapView.onDestroy(); } @Override public void activate(OnLocationChangedListener onLocationChangedListener) { mListener = onLocationChangedListener; if (mAMapLocationManager == null) { mAMapLocationManager = LocationManagerProxy.getInstance(getApplicationContext()); //此方法为每隔固定时间会发起一次定位请求,为了减少电量消耗或网络流量消耗, //注意设置合适的定位时间的间隔,并且在合适时间调用removeUpdates()方法来取消定位请求 //在定位结束后,在合适的生命周期调用destroy()方法 //其中如果间隔时间为-1,则定位只定一次 mAMapLocationManager.requestLocationData(LocationProviderProxy.AMapNetwork, -1, 10, this); } } @Override public void deactivate() { mListener = null; if (mAMapLocationManager != null) { mAMapLocationManager.removeUpdates(this); mAMapLocationManager.destroy(); } mAMapLocationManager = null; } @Override public void onLocationChanged(AMapLocation aMapLocation) { if (mListener != null &&aMapLocation != null) { if (aMapLocation.getAMapException().getErrorCode() == 0) { mListener.onLocationChanged(aMapLocation);// 显示系统小蓝点 //获取位置信息 Double dgeoLat = aMapLocation.getLatitude(); Double geoLng = aMapLocation.getLongitude(); aMap.moveCamera(CameraUpdateFactory.zoomTo(16)); } } } @Override public void onLocationChanged(Location location) { } @Override public void onStatusChanged(String provider, int status, Bundle extras) { } @Override public void onProviderEnabled(String provider) { } @Override public void onProviderDisabled(String provider) { } }