配置BaiduMap 環(huán)境
1.在百度API中新建自己的一個APP包名和APP名需要注意和自己Android Studio 中的包名和APP名保持一致;
2.百度地圖中還需要填寫一個SHA1 數(shù)字簽名:
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.根據(jù)需要在(http://lbsyun.baidu.com/sdk/download?selected=location)下載自己需要的SDK包,因為只實現(xiàn)定位所以我這里只下載了定位功能的包;
4.解壓下載好的包,為了讓app兼容性更好,我把libs下的所有文件及文件夾復(fù)制到了app中l(wèi)ibs中;
5.配置Manifest文件,首先在Application中添加你獲得的AppKey:
<meta-dataandroid:name="com.baidu.lbsapi.API_KEY"android:value="這里是你申請的AppKey" />
然后緊接著需要注冊一個專門供BaiDuMap使用的service(自己不用實現(xiàn)):
<serviceandroid:name="com.baidu.location.f"android:enabled="true"android:process=":remote"/>
最后再配置權(quán)限,定位所需要用到的一系列權(quán)限(這一塊在官方文檔上也是有的):
<!-- 這個權(quán)限用于進行網(wǎng)絡(luò)定位--><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/><!-- 這個權(quán)限用于訪問GPS定位--><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/><!-- 用于訪問wifi網(wǎng)絡(luò)信息,wifi信息會用于進行網(wǎng)絡(luò)定位--><uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/><!-- 獲取運營商信息,用于支持提供運營商信息相關(guān)的接口--><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/><!-- 這個權(quán)限用于獲取wifi的獲取權(quán)限,wifi信息會用來進行網(wǎng)絡(luò)定位--><uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/><!-- 用于讀取手機當(dāng)前的狀態(tài)--><uses-permission android:name="android.permission.READ_PHONE_STATE"/><!-- 寫入擴展存儲,向擴展卡寫入數(shù)據(jù),用于寫入離線定位數(shù)據(jù)--><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><!-- 訪問網(wǎng)絡(luò),網(wǎng)絡(luò)定位需要上網(wǎng)--><uses-permission android:name="android.permission.INTERNET" /><!-- SD卡讀取權(quán)限,用戶寫入離線定位數(shù)據(jù)--><uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
至此環(huán)境配置完成。
實現(xiàn)功能代碼
1.在layout寫一個TextView用來存放自己定位的信息:
<TextViewandroid:id="@+id/mytext"android:layout_width="match_parent"android:layout_height="wrap_content"/>
2.在定位中需要用到一個定位回調(diào)接口BDLocationListener和類LocationClient:
① BDLocationListener中一個定位回調(diào)函數(shù)onReceiveLocation(BDLocation location)返回一個BDLocation定位結(jié)果;
② LocationClient類實例化并實現(xiàn)一個定位監(jiān)聽函數(shù)(registerLocationListener(BDLocationListener listener));
定義TextView控件和其他方法類:
private TextView textView = null;private Button button = null;private LocationClient locationClient = null;public BDLocationListener myListener = new MyBdlocationListener();
實現(xiàn)BDLocationListener(里面的一些判斷可以自己去考慮和添加或者需要什么定位信息自行去嘗試,這里只是得到了當(dāng)前地址):
public class MyBdlocationListener implements BDLocationListener{@Overridepublic void onReceiveLocation(BDLocation location) {textView.setText(location.getAddrStr()); } } 分別得到所有控件和實例:
textView = (TextView) findViewById(R.id.mytext);button = (Button) findViewById(R.id.mybtn);locationClient = new LocationClient(getApplicationContext());locationClient.registerLocationListener(myListener);initLocation();//初始化LocationgClientbutton.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {if (locationClient.isStarted()){locationClient.stop();}locationClient.start();}}); 初始化LocationgClient:
private void initLocation(){LocationClientOption option = new LocationClientOption();option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);//可選,默認高精度,設(shè)置定位模式,高精度,低功耗,僅設(shè)備option.setCoorType("bd09ll");//可選,默認gcj02,設(shè)置返回的定位結(jié)果坐標系int span=1000;option.setScanSpan(span);//可選,默認0,即僅定位一次,設(shè)置發(fā)起定位請求的間隔需要大于等于1000ms才是有效的option.setIsNeedAddress(true);//可選,設(shè)置是否需要地址信息,默認不需要option.setOpenGps(true);//可選,默認false,設(shè)置是否使用gpsoption.setLocationNotify(true);//可選,默認false,設(shè)置是否當(dāng)gps有效時按照1S1次頻率輸出GPS結(jié)果option.setIsNeedLocationDescribe(true);//可選,默認false,設(shè)置是否需要位置語義化結(jié)果,可以在BDLocation.getLocationDescribe里得到,結(jié)果類似于“在北京天安門附近”option.setIsNeedLocationPoiList(true);//可選,默認false,設(shè)置是否需要POI結(jié)果,可以在BDLocation.getPoiList里得到option.setIgnoreKillProcess(false);//可選,默認true,定位SDK內(nèi)部是一個SERVICE,并放到了獨立進程,設(shè)置是否在stop的時候殺死這個進程,默認不殺死option.SetIgnoreCacheException(false);//可選,默認false,設(shè)置是否收集CRASH信息,默認收集option.setEnableSimulateGps(false);//可選,默認false,設(shè)置是否需要過濾gps仿真結(jié)果,默認需要locationClient.setLocOption(option);} 至此所有步驟完成,可以嘗試運行一下!
在Android Studio中使用BaiduMap SDK實時獲取當(dāng)?shù)匚恢眯畔⒌南嚓P(guān)知識就給大家介紹到這里,希望對大家有所幫助!
新聞熱點
疑難解答
圖片精選