高德地图开发(一)显示地图与定位
生活随笔
收集整理的這篇文章主要介紹了
高德地图开发(一)显示地图与定位
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
如果地圖功能隨處可見,應用很廣,這里利用高德地圖的SDK來實現地圖的顯示以及定位功能。如需要詳細了解參考官網信息http://lbs.amap.com/api/android-sdk/summary
使用高德地圖你還得需要一個key。注冊一個高德地圖賬號,在開發者平臺?進入右上角的控制臺,在應用管理中新建一個應用就可以獲取到key了。
首先官網下載SDK包http://lbs.amap.com/api/android-sdk/download,如果你下載的是2D地圖則只有一個jar包,拷貝放入項目的libs文件夾里面,右鍵選擇add as library即可。如果是3D包的話,則里面除了一個jar還有相關的so文件,你不僅要導入jar還得導入相關so文件。在main文件夾下建一個jnilibs文件夾,把所有的so文件放進去即可。如圖
然后注冊文件中加個meta-data,里面的name是固定的,但是value是你獲取的key。加相關權限,權限有點多,管它有沒有用,都加上。
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example.gdmap"><uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /><uses-permission android:name="android.permission.READ_PHONE_STATE" /><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /><uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" /><uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /><applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/AppTheme"><!--value處加上自己申請的key--><meta-dataandroid:name="com.amap.api.v2.apikey"android:value="1bfdd3600775f90d9953ca0351836006"/><activity android:name=".MainActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application></manifest>布局文件中寫一個地圖視圖
<com.amap.api.maps.MapViewandroid:id="@+id/map"android:layout_width="match_parent"android:layout_height="match_parent"/>然后是主活動,只要你將調用了mapview.oncreate方法,地圖就能顯示出來,其他的都是定位相關的操作,代碼中都有說明。 package com.example.gdmap;import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.Log;import com.amap.api.location.AMapLocation; import com.amap.api.location.AMapLocationClient; import com.amap.api.location.AMapLocationClientOption; import com.amap.api.location.AMapLocationListener; import com.amap.api.maps.AMap; import com.amap.api.maps.LocationSource; import com.amap.api.maps.MapView; import com.amap.api.maps.UiSettings;public class MainActivity extends AppCompatActivity implements LocationSource,AMapLocationListener{MapView mapView=null;//地圖視圖AMap aMap;//地圖對象OnLocationChangedListener mlistener;//定位監聽AMapLocationClient client;//定位者AMapLocationClientOption option;//定位參數@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mapView= (MapView) findViewById(R.id.map);mapView.onCreate(savedInstanceState);//創建地圖init();}public void init(){aMap=mapView.getMap();//獲取地圖對象UiSettings settings=aMap.getUiSettings();//獲取定位按鈕aMap.setLocationSource(this);//設置定位監聽settings.setMyLocationButtonEnabled(true);//顯示定位按鈕aMap.setMyLocationEnabled(true);//顯示定位層并可觸發定位}//activate初始化定位@Overridepublic void activate(OnLocationChangedListener onLocationChangedListener) {mlistener=onLocationChangedListener;client=new AMapLocationClient(this);client.setLocationListener(this);//定位回調監聽option=new AMapLocationClientOption();option.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);//高進度定位client.setLocationOption(option);//加載定位參數client.startLocation();//開始定位}//deactivate停止定位@Overridepublic void deactivate() {mlistener = null;if (client != null) {client.stopLocation();client.onDestroy();}client = null;}//定位成功后回調函數@Overridepublic void onLocationChanged(AMapLocation aMapLocation) {if(mlistener!=null){if(aMapLocation!=null&&aMapLocation.getErrorCode()==0){Log.e("經度: ", String.valueOf(aMapLocation.getLatitude()));Log.e("緯度: ", String.valueOf(aMapLocation.getLongitude()));Log.e("地址:",aMapLocation.getAddress());mlistener.onLocationChanged(aMapLocation);}else Log.e("定位結果","定位失敗");}}@Overrideprotected void onDestroy() {super.onDestroy();mapView.onDestroy();if(client!=null) client.onDestroy();} } 這樣定位有點bug,首先它默認隔兩秒就定位一次,一直在定位,有時候我們只需要定位一次或讓它在指定的時候就開始定位。查閱相關文檔后發現兩個AmaplocaionClientoption中的方法,設置時間間隔setInterval,設置只定位一次setOnceLocation。 還有就是只有第一次定位成功,其他時候都定位失敗,錯誤碼為10,這個錯誤碼是啟動服務失敗。因為沒手動加服務。加上定位服務即可。
<service android:name="com.amap.api.location.APSService"></service>
最后來一張效果圖
總結
以上是生活随笔為你收集整理的高德地图开发(一)显示地图与定位的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 贪吃蛇游戏 c++代码 ↑,↓,→,
- 下一篇: 解析二分查找时间复杂度