高德地图开发(一)显示地图与定位
如果地圖功能隨處可見,應(yīng)用很廣,這里利用高德地圖的SDK來實(shí)現(xiàn)地圖的顯示以及定位功能。如需要詳細(xì)了解參考官網(wǎng)信息http://lbs.amap.com/api/android-sdk/summary
使用高德地圖你還得需要一個(gè)key。注冊(cè)一個(gè)高德地圖賬號(hào),在開發(fā)者平臺(tái)?進(jìn)入右上角的控制臺(tái),在應(yīng)用管理中新建一個(gè)應(yīng)用就可以獲取到key了。
首先官網(wǎng)下載SDK包http://lbs.amap.com/api/android-sdk/download,如果你下載的是2D地圖則只有一個(gè)jar包,拷貝放入項(xiàng)目的libs文件夾里面,右鍵選擇add as library即可。如果是3D包的話,則里面除了一個(gè)jar還有相關(guān)的so文件,你不僅要導(dǎo)入jar還得導(dǎo)入相關(guān)so文件。在main文件夾下建一個(gè)jnilibs文件夾,把所有的so文件放進(jìn)去即可。如圖
然后注冊(cè)文件中加個(gè)meta-data,里面的name是固定的,但是value是你獲取的key。加相關(guān)權(quán)限,權(quán)限有點(diǎn)多,管它有沒有用,都加上。
<?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處加上自己申請(qǐng)的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>布局文件中寫一個(gè)地圖視圖
<com.amap.api.maps.MapViewandroid:id="@+id/map"android:layout_width="match_parent"android:layout_height="match_parent"/>然后是主活動(dòng),只要你將調(diào)用了mapview.oncreate方法,地圖就能顯示出來,其他的都是定位相關(guān)的操作,代碼中都有說明。 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;//地圖對(duì)象OnLocationChangedListener mlistener;//定位監(jiān)聽AMapLocationClient client;//定位者AMapLocationClientOption option;//定位參數(shù)@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mapView= (MapView) findViewById(R.id.map);mapView.onCreate(savedInstanceState);//創(chuàng)建地圖init();}public void init(){aMap=mapView.getMap();//獲取地圖對(duì)象UiSettings settings=aMap.getUiSettings();//獲取定位按鈕aMap.setLocationSource(this);//設(shè)置定位監(jiān)聽settings.setMyLocationButtonEnabled(true);//顯示定位按鈕aMap.setMyLocationEnabled(true);//顯示定位層并可觸發(fā)定位}//activate初始化定位@Overridepublic void activate(OnLocationChangedListener onLocationChangedListener) {mlistener=onLocationChangedListener;client=new AMapLocationClient(this);client.setLocationListener(this);//定位回調(diào)監(jiān)聽option=new AMapLocationClientOption();option.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);//高進(jìn)度定位client.setLocationOption(option);//加載定位參數(shù)client.startLocation();//開始定位}//deactivate停止定位@Overridepublic void deactivate() {mlistener = null;if (client != null) {client.stopLocation();client.onDestroy();}client = null;}//定位成功后回調(diào)函數(shù)@Overridepublic void onLocationChanged(AMapLocation aMapLocation) {if(mlistener!=null){if(aMapLocation!=null&&aMapLocation.getErrorCode()==0){Log.e("經(jīng)度: ", String.valueOf(aMapLocation.getLatitude()));Log.e("緯度: ", String.valueOf(aMapLocation.getLongitude()));Log.e("地址:",aMapLocation.getAddress());mlistener.onLocationChanged(aMapLocation);}else Log.e("定位結(jié)果","定位失敗");}}@Overrideprotected void onDestroy() {super.onDestroy();mapView.onDestroy();if(client!=null) client.onDestroy();} } 這樣定位有點(diǎn)bug,首先它默認(rèn)隔兩秒就定位一次,一直在定位,有時(shí)候我們只需要定位一次或讓它在指定的時(shí)候就開始定位。查閱相關(guān)文檔后發(fā)現(xiàn)兩個(gè)AmaplocaionClientoption中的方法,設(shè)置時(shí)間間隔setInterval,設(shè)置只定位一次setOnceLocation。 還有就是只有第一次定位成功,其他時(shí)候都定位失敗,錯(cuò)誤碼為10,這個(gè)錯(cuò)誤碼是啟動(dòng)服務(wù)失敗。因?yàn)闆]手動(dòng)加服務(wù)。加上定位服務(wù)即可。
<service android:name="com.amap.api.location.APSService"></service>
最后來一張效果圖
總結(jié)
以上是生活随笔為你收集整理的高德地图开发(一)显示地图与定位的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 贪吃蛇游戏 c++代码 ↑,↓,→,
- 下一篇: 解析二分查找时间复杂度