天天看点

Android开发笔记----高德地图定位

获取用户当前位置,需要配合定位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) {     } }

继续阅读