




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
【移動(dòng)應(yīng)用開發(fā)技術(shù)】Android怎么調(diào)用高德地圖定位
這篇文章主要為大家展示了“Android怎么調(diào)用高德地圖定位”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓在下帶領(lǐng)大家一起研究并學(xué)習(xí)一下“Android怎么調(diào)用高德地圖定位”這篇文章吧。在App中使用地圖定位十分常見,購(gòu)物功能的可以直接定位當(dāng)前位置,發(fā)動(dòng)態(tài)功能可以定位當(dāng)前位置發(fā)出,社交功能可以定位周邊用戶等等。這里我使用高德地圖定位當(dāng)前位置并顯示地址和經(jīng)緯度。先上效果圖:實(shí)現(xiàn)步驟:1.創(chuàng)建應(yīng)用獲取key:接入第三方無(wú)一例外,去高德地圖官網(wǎng)注冊(cè)賬號(hào)并創(chuàng)建應(yīng)用。填入包名和keystore的Sha1。創(chuàng)建應(yīng)用獲取Sha1,輸入命令keytool-v-list-keystorekeystore文件路徑,我在這里通過(guò)控制臺(tái)獲取調(diào)試版的:進(jìn)入.android目錄cd
.android輸入命令獲取keytool
-v
-list
-keystore
debug.keystore過(guò)程截圖:創(chuàng)建完成獲取Key:2.接入SDK添加定位庫(kù)compile
'com.amap.api:location:egration'添加2D地圖庫(kù)compile
'com.amap.api:map2d:egration'添加地圖權(quán)限:
<uses-permission
android:name="android.permission.INTERNET"
/>
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"
/>
<uses-permission
android:name="android.permission.ACCESS_COARSE_LOCATION"
/>
<uses-permission
android:name="android.permission.ACCESS_NETWORK_STATE"
/>
<uses-permission
android:name="android.permission.ACCESS_FINE_LOCATION"
/>
<uses-permission
android:name="android.permission.READ_PHONE_STATE"
/>
<uses-permission
android:name="android.permission.CHANGE_WIFI_STATE"
/>
<uses-permission
android:name="android.permission.ACCESS_WIFI_STATE"
/>
<uses-permission
android:name="android.permission.CHANGE_CONFIGURATION"
/>
<uses-permission
android:name="android.permission.WAKE_LOCK"
/>
<uses-permission
android:name="android.permission.WRITE_SETTINGS"
/>在<application></application>中設(shè)置地圖key
<meta-data
android:name="com.amap.api.v2.apikey"
android:value="57b811b21061501ee320e171568f0dac"
/>3.代碼實(shí)現(xiàn)(帶每一步功能注釋):實(shí)現(xiàn)思路:創(chuàng)建MapView顯示地圖;設(shè)置定位定位監(jiān)聽,設(shè)置定位參數(shù),在activate激活后啟動(dòng)定位;在定位回調(diào)中獲取經(jīng)緯度,在將地圖移動(dòng)到定位位置,在該經(jīng)緯度上添加覆蓋圖標(biāo)。詳細(xì)代碼如下:地圖控件:
<com.amap.api.maps2d.MapView
android:id="@+id/mapview"
android:layout_width="match_parent"
android:layout_height="match_parent"/>定位類AmapActivity完整代碼:import
android.support.v7.app.AppCompatActivity;
import
android.os.Bundle;
import
com.amap.api.location.AMapLocation;
import
com.amap.api.maps2d.AMap;
import
com.amap.api.maps2d.CameraUpdateFactory;
import
com.amap.api.maps2d.LocationSource;
import
com.amap.api.maps2d.MapView;
import
com.amap.api.maps2d.model.LatLng;
public
class
AmapActivity
extends
AppCompatActivity
implements
LocationSource
{
private
MapView
mapView;
private
AMap
aMap;
private
LocationSource.OnLocationChangedListener
mListener
=
null;//定位監(jiān)聽器
private
LocationUtil
locationUtil;
@Override
protected
void
onCreate(Bundle
savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_amap);
mapView
=
(MapView)
findViewById(R.id.mapview);
mapView.onCreate(savedInstanceState);
init();
}
private
void
init()
{
if(aMap
==
null){
aMap
=
mapView.getMap();
}
setLocationCallBack();
//設(shè)置定位監(jiān)聽
aMap.setLocationSource(this);
//設(shè)置縮放級(jí)別
aMap.moveCamera(CameraUpdateFactory.zoomTo(15));
//顯示定位層并可觸發(fā),默認(rèn)false
aMap.setMyLocationEnabled(true);
}
private
void
setLocationCallBack(){
locationUtil
=
new
LocationUtil();
locationUtil.setLocationCallBack(new
LocationUtil.ILocationCallBack()
{
@Override
public
void
callBack(String
str,double
lat,double
lgt,AMapLocation
aMapLocation)
{
//根據(jù)獲取的經(jīng)緯度,將地圖移動(dòng)到定位位置
aMap.moveCamera(CameraUpdateFactory.changeLatLng(new
LatLng(lat,lgt)));
mListener.onLocationChanged(aMapLocation);
//添加定位圖標(biāo)
aMap.addMarker(locationUtil.getMarkerOption(str,lat,lgt));
}
});
}
//定位激活回調(diào)
@Override
public
void
activate(OnLocationChangedListener
onLocationChangedListener)
{
mListener
=
onLocationChangedListener;
locationUtil.startLocate(getApplicationContext());
}
@Override
public
void
deactivate()
{
mListener
=
null;
}
@Override
protected
void
onPause()
{
super.onPause();
//暫停地圖的繪制
mapView.onPause();
}
@Override
protected
void
onDestroy()
{
super.onDestroy();
//銷毀地圖
mapView.onDestroy();
}
@Override
protected
void
onResume()
{
super.onResume();
//重新繪制加載地圖
mapView.onResume();
}
@Override
public
void
onSaveInstanceState(Bundle
outState)
{
super.onSaveInstanceState(outState);
mapView.onSaveInstanceState(outState);
}
}定位參數(shù)設(shè)置和定位回調(diào)LocationUtil類完整代碼:import
android.content.Context;
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.maps2d.model.BitmapDescriptorFactory;
import
com.amap.api.maps2d.model.LatLng;
import
com.amap.api.maps2d.model.MarkerOptions;
/**
*
Created
by
libo
on
2018/2/2.
*/
public
class
LocationUtil
implements
AMapLocationListener
{
private
AMapLocationClient
aMapLocationClient;
private
AMapLocationClientOption
clientOption;
private
ILocationCallBack
callBack;
public
void
startLocate(Context
context){
aMapLocationClient
=
new
AMapLocationClient(context);
//設(shè)置監(jiān)聽回調(diào)
aMapLocationClient.setLocationListener(this);
//初始化定位參數(shù)
clientOption
=
new
AMapLocationClientOption();
clientOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Battery_Saving);
clientOption.setNeedAddress(true);
clientOption.setOnceLocation(false);
//設(shè)置是否強(qiáng)制刷新WIFI,默認(rèn)為強(qiáng)制刷新
clientOption.setWifiActiveScan(true);
//設(shè)置是否允許模擬位置,默認(rèn)為false,不允許模擬位置
clientOption.setMockEnable(false);
//設(shè)置定位間隔
clientOption.setInterval(2000);
aMapLocationClient.setLocationOption(clientOption);
aMapLocationClient.startLocation();
}
//完成定位回調(diào)
@Override
public
void
onLocationChanged(AMapLocation
aMapLocation)
{
if(aMapLocation
!=
null){
if(aMapLocation.getErrorCode()
==
0){
//定位成功完成回調(diào)
String
country
=
aMapLocation.getCountry();
String
province
=
aMapLocation.getProvince();
String
city
=
aMapLocation.getCity();
String
district
=
aMapLocation.getDistrict();
String
street
=
aMapLocation.getStreet();
double
lat
=
aMapLocation.getLatitude();
double
lgt
=
aMapLocation.getLongitude();
callBack.callBack(country
+
province
+
city
+
district
+
street,lat,lgt,aMapLocation);
}else{
//顯示錯(cuò)誤信息ErrCode是錯(cuò)誤碼,errInfo是錯(cuò)誤信息,詳見錯(cuò)誤碼表。
Log.e("AmapError",
"location
Error,
ErrCode:"
+
aMapLocation.getErrorCode()
+
",
errInfo:"
+
aMapLocation.getErrorInfo());
}
}
}
/**
*
自定義圖標(biāo)
*
@return
*/
public
MarkerOptions
getMarkerOption(String
str,double
lat,double
lgt){
MarkerOptions
markerOptions
=
new
MarkerO
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 油槽施工方案怎么寫
- 項(xiàng)目任務(wù)分配最佳實(shí)踐試題及答案
- 微生物生成物的檢驗(yàn)技術(shù)與試題及答案
- 糧食儲(chǔ)備的緊急調(diào)配機(jī)制考核試卷
- 2024年項(xiàng)目管理應(yīng)對(duì)突發(fā)事件試題及答案
- 項(xiàng)目質(zhì)量控制過(guò)程中的挑戰(zhàn)試題及答案
- 煤炭批發(fā)商品牌建設(shè)與推廣考核試卷
- 2024年項(xiàng)目管理全時(shí)期試題及答案
- 水利施工機(jī)械管理考核試卷
- 漁船自動(dòng)導(dǎo)航系統(tǒng)考核試卷
- 2024新滬教版英語(yǔ)初一上單詞表
- SF-36生活質(zhì)量調(diào)查表(SF-36-含評(píng)分細(xì)則)
- 后勤管理安全生產(chǎn)培訓(xùn)內(nèi)容122頁(yè)P(yáng)PT課件
- 直銷人必備—目標(biāo)與計(jì)劃
- 等離子體光譜診斷實(shí)驗(yàn)報(bào)告
- COMMERCIAL INVOICE 商業(yè)發(fā)票
- 永磁吸盤使用方法及安全事項(xiàng)
- 哈薩克斯坦2050戰(zhàn)略總統(tǒng)國(guó)情咨文(中文版)
- 接待手冊(cè)(范本)
- 還款證明(四種格式)
- 分管教學(xué)副校長(zhǎng)在期中質(zhì)量分析會(huì)上的發(fā)言教學(xué)文稿
評(píng)論
0/150
提交評(píng)論