配置baidumap 環境
1.在百度api中新建自己的一個app包名和app名需要注意和自己android studio 中的包名和app名保持一致;
2.百度地圖中還需要填寫一個sha1 數字簽名:
a、輸入keytool -list -v -keystore debug.keystore,會得到三種指紋證書,選取sha1類型的證書(密鑰口令是android),這個獲取到的sha1的值和ecplise中獲取的值是一樣的,是作為debug用的。
b、輸入keytool -list -v -keystore xxx.keystore,(這個地方xxx.keystore是你生成app簽名時的keystore),密鑰庫口令:為給app簽名時生成xxx.keystore期間所輸入的密碼,此時獲取的sha1是release版的。
(以上主要是為了得到appkey,沒有appkey讀取的值會有問題)
3.根據需要在(http://lbsyun.baidu.com/sdk/download?selected=location)下載自己需要的sdk包,因為只實現定位所以我這里只下載了定位功能的包;
4.解壓下載好的包,為了讓app兼容性更好,我把libs下的所有文件及文件夾復制到了app中libs中;
5.配置manifest文件,首先在application中添加你獲得的appkey:
1
2
3
|
<meta-data android:name= "com.baidu.lbsapi.api_key" android:value= "這里是你申請的appkey" /> |
然后緊接著需要注冊一個專門供baidumap使用的service(自己不用實現):
1
2
3
4
|
<service android:name= "com.baidu.location.f" android:enabled= "true" android:process= ":remote" /> |
最后再配置權限,定位所需要用到的一系列權限(這一塊在官方文檔上也是有的):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
<!-- 這個權限用于進行網絡定位--> <uses-permission android:name= "android.permission.access_coarse_location" /> <!-- 這個權限用于訪問gps定位--> <uses-permission android:name= "android.permission.access_fine_location" /> <!-- 用于訪問wifi網絡信息,wifi信息會用于進行網絡定位--> <uses-permission android:name= "android.permission.access_wifi_state" /> <!-- 獲取運營商信息,用于支持提供運營商信息相關的接口--> <uses-permission android:name= "android.permission.access_network_state" /> <!-- 這個權限用于獲取wifi的獲取權限,wifi信息會用來進行網絡定位--> <uses-permission android:name= "android.permission.change_wifi_state" /> <!-- 用于讀取手機當前的狀態--> <uses-permission android:name= "android.permission.read_phone_state" /> <!-- 寫入擴展存儲,向擴展卡寫入數據,用于寫入離線定位數據--> <uses-permission android:name= "android.permission.write_external_storage" /> <!-- 訪問網絡,網絡定位需要上網--> <uses-permission android:name= "android.permission.internet" /> <!-- sd卡讀取權限,用戶寫入離線定位數據--> <uses-permission android:name= "android.permission.mount_unmount_filesystems" /> |
至此環境配置完成。
實現功能代碼
1.在layout寫一個textview用來存放自己定位的信息:
1
2
3
4
5
|
<textview android:id= "@+id/mytext" android:layout_width= "match_parent" android:layout_height= "wrap_content" /> |
2.在定位中需要用到一個定位回調接口bdlocationlistener和類locationclient:
① bdlocationlistener中一個定位回調函數onreceivelocation(bdlocation location)返回一個bdlocation定位結果;
② locationclient類實例化并實現一個定位監聽函數(registerlocationlistener(bdlocationlistener listener));
定義textview控件和其他方法類:
1
2
3
4
|
private textview textview = null ; private button button = null ; private locationclient locationclient = null ; public bdlocationlistener mylistener = new mybdlocationlistener(); |
實現bdlocationlistener(里面的一些判斷可以自己去考慮和添加或者需要什么定位信息自行去嘗試,這里只是得到了當前地址):
1
2
3
4
|
public class mybdlocationlistener implements bdlocationlistener{ @override public void onreceivelocation(bdlocation location) { textview.settext(location.getaddrstr()); } } |
分別得到所有控件和實例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
textview = (textview) findviewbyid(r.id.mytext); button = (button) findviewbyid(r.id.mybtn); locationclient = new locationclient(getapplicationcontext()); locationclient.registerlocationlistener(mylistener); initlocation(); //初始化locationgclient button.setonclicklistener( new view.onclicklistener() { @override public void onclick(view view) { if (locationclient.isstarted()){ locationclient.stop(); } locationclient.start(); } }); |
初始化locationgclient:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
private void initlocation(){ locationclientoption option = new locationclientoption(); option.setlocationmode(locationclientoption.locationmode.hight_accuracy ); //可選,默認高精度,設置定位模式,高精度,低功耗,僅設備 option.setcoortype( "bd09ll" ); //可選,默認gcj02,設置返回的定位結果坐標系 int span= 1000 ; option.setscanspan(span); //可選,默認0,即僅定位一次,設置發起定位請求的間隔需要大于等于1000ms才是有效的 option.setisneedaddress( true ); //可選,設置是否需要地址信息,默認不需要 option.setopengps( true ); //可選,默認false,設置是否使用gps option.setlocationnotify( true ); //可選,默認false,設置是否當gps有效時按照1s1次頻率輸出gps結果 option.setisneedlocationdescribe( true ); //可選,默認false,設置是否需要位置語義化結果,可以在bdlocation.getlocationdescribe里得到,結果類似于“在北京天安門附近” option.setisneedlocationpoilist( true ); //可選,默認false,設置是否需要poi結果,可以在bdlocation.getpoilist里得到 option.setignorekillprocess( false ); //可選,默認true,定位sdk內部是一個service,并放到了獨立進程,設置是否在stop的時候殺死這個進程,默認不殺死 option.setignorecacheexception( false ); //可選,默認false,設置是否收集crash信息,默認收集 option.setenablesimulategps( false ); //可選,默認false,設置是否需要過濾gps仿真結果,默認需要 locationclient.setlocoption(option); } |
至此所有步驟完成,可以嘗試運行一下!
在android studio中使用baidumap sdk實時獲取當地位置信息的相關知識就給大家介紹到這里,希望對大家有所幫助!