Android開發實現高德地圖定位

1.獲取Key

    參考官方文檔:http://lbs.amap.com/api/android-location-sdk/guide/create-project/get-keyandroid

    對於簽名文件的獲取建議參考:http://blog.csdn.net/caben_/article/details/52708169,經過簽名文件能夠使咱們在其餘電腦上key不會報錯。git

 配置key的時候注意name不變:github

<meta-data
android:name="com.amap.api.v2.apikey"
android:value="b1b7d5f1feb8be38b284c9e2aabab87b">
</meta-data>

2.獲取定位

   參考官方文檔:http://lbs.amap.com/api/android-location-sdk/guide/android-location/getlocation/api

 對於Android6.0權限咱們能夠在build中聲明 targetSdkVersion 22 小於23便可。這樣作會默認打開6.0以上須要從新申請的權限,咱們也能夠在代碼中動態處理6.0以上權限申請,相對麻煩一些。ide

  

public class MainActivity extends AppCompatActivity implements AMapLocationListener, LocationSource {    private MapView mMapView = null;    private AMap aMap;    //標識,用於判斷是否只顯示一次定位信息和用戶從新定位    private boolean isFirstLoc = true;    //聲明mListener對象,定位監聽器    private OnLocationChangedListener mListener = null;    //聲明AMapLocationClient類對象    public AMapLocationClient mLocationClient = null;    //聲明AMapLocationClientOption對象    public AMapLocationClientOption mLocationOption = null;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //獲取地圖控件引用        mMapView = (MapView) findViewById(R.id.map);        //在activity執行onCreate時執行mMapView.onCreate(savedInstanceState),建立地圖        mMapView.onCreate(savedInstanceState);        if (aMap == null) {            aMap = mMapView.getMap();            //設置顯示定位按鈕 而且能夠點擊            UiSettings settings = aMap.getUiSettings();            aMap.setLocationSource(this);//設置了定位的監聽            // 是否顯示定位按鈕            settings.setMyLocationButtonEnabled(true);            aMap.setMyLocationEnabled(true);//顯示定位層而且能夠觸發定位,默認是flase        }        // 設置定位監聽        aMap.setLocationSource(this);        // 設置爲true表示顯示定位層並可觸發定位,false表示隱藏定位層並不可觸發定位,默認是false        aMap.setMyLocationEnabled(true);        // 設置定位的類型爲定位模式,有定位、跟隨或地圖根據面向方向旋轉幾種        aMap.setMyLocationType(AMap.LOCATION_TYPE_LOCATE);        initLocation();    }    private void initLocation() {        //初始化定位        mLocationClient = new AMapLocationClient(getApplicationContext());        //設置定位回調監聽        mLocationClient.setLocationListener(this);        //初始化AMapLocationClientOption對象        mLocationOption = new AMapLocationClientOption();        //設置定位模式爲AMapLocationMode.Hight_Accuracy,高精度模式。        mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);        //獲取一次定位結果:        //該方法默認爲false。        mLocationOption.setOnceLocation(true);        //獲取最近3s內精度最高的一次定位結果:        //設置setOnceLocationLatest(boolean b)接口爲true,啓動定位時SDK會返回最近3s內精度最高的一次定位結果。若是設置其爲true,setOnceLocation(boolean b)接口也會被設置爲true,反之不會,默認爲false。        mLocationOption.setOnceLocationLatest(true);        //給定位客戶端對象設置定位參數        mLocationClient.setLocationOption(mLocationOption);        //啓動定位        mLocationClient.startLocation();    }    @Override    protected void onDestroy() {        super.onDestroy();        mLocationClient.stopLocation();//中止定位後,本地定位服務並不會被銷燬        mLocationClient.onDestroy();//銷燬定位客戶端,同時銷燬本地定位服務        //在activity執行onDestroy時執行mMapView.onDestroy(),銷燬地圖        mMapView.onDestroy();    }    @Override    protected void onResume() {        super.onResume();        //在activity執行onResume時執行mMapView.onResume (),從新繪製加載地圖        mMapView.onResume();    }    @Override    protected void onPause() {        super.onPause();        //在activity執行onPause時執行mMapView.onPause (),暫停地圖的繪製        mMapView.onPause();    }    @Override    protected void onSaveInstanceState(Bundle outState) {        super.onSaveInstanceState(outState);        //在activity執行onSaveInstanceState時執行mMapView.onSaveInstanceState (outState),保存地圖當前的狀態        mMapView.onSaveInstanceState(outState);    }    @Override    public void onLocationChanged(AMapLocation amapLocation) {        if (amapLocation != null) {            if (amapLocation.getErrorCode() == 0) {                //可在其中解析amapLocation獲取相應內容。更多內容能夠打斷點查看,也可參考官方文檔                Log.i("Talon", amapLocation.getAddress());                // 若是不設置標誌位,此時再拖動地圖時,它會不斷將地圖移動到當前的位置                if (isFirstLoc) {                    //設置縮放級別                    aMap.moveCamera(CameraUpdateFactory.zoomTo(17));                    //將地圖移動到定位點                    aMap.moveCamera(CameraUpdateFactory.changeLatLng(new LatLng(amapLocation.getLatitude(), amapLocation.getLongitude())));                    //點擊定位按鈕 可以將地圖的中心移動到定位點                    mListener.onLocationChanged(amapLocation);                    //添加圖釘//                      aMap.addMarker(getMarkerOptions(amapLocation));                    isFirstLoc = false;                } else {                    //定位失敗時,可經過ErrCode(錯誤碼)信息來肯定失敗的緣由,errInfo是錯誤信息,詳見錯誤碼錶。                    Log.e("AmapError", "location Error, ErrCode:"                            + amapLocation.getErrorCode() + ", errInfo:"                            + amapLocation.getErrorInfo());                }            }        }    }    //激活定位    @Override    public void activate(OnLocationChangedListener onLocationChangedListener) {        mListener = onLocationChangedListener;    }    //中止定位    @Override    public void deactivate() {        mListener = null;    }}小白我的GitHub地址:https://github.com/IT-Talon/GaodeMapDemo
相關文章
相關標籤/搜索