在Android Studio中使用BaiduMap SDK實時獲取當(dāng)?shù)匚恢眯畔?/h1>
更新時間:2016年03月15日 09:56:35 作者:傻啦吧唧的程序員丶
這篇文章主要介紹了在Android Studio中使用BaiduMap SDK實時獲取當(dāng)?shù)匚恢眯畔?的相關(guān)資料,需要的朋友可以參考下
配置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-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="這里是你申請的AppKey" />
然后緊接著需要注冊一個專門供BaiDuMap使用的service(自己不用實現(xiàn)):
<service
android:name="com.baidu.location.f"
android:enabled="true"
android:process=":remote"/>
最后再配置權(quán)限,定位所需要用到的一系列權(quán)限(這一塊在官方文檔上也是有的):
<!-- 這個權(quán)限用于進(jì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信息會用于進(jìn)行網(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信息會用來進(jìn)行網(wǎng)絡(luò)定位-->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<!-- 用于讀取手機(jī)當(dāng)前的狀態(tài)-->
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<!-- 寫入擴(kuò)展存儲,向擴(kuò)展卡寫入數(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用來存放自己定位的信息:
<TextView
android: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{
@Override
public 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();//初始化LocationgClient
button.setOnClickListener(new View.OnClickListener() {
@Override
public 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
);//可選,默認(rèn)高精度,設(shè)置定位模式,高精度,低功耗,僅設(shè)備
option.setCoorType("bd09ll");//可選,默認(rèn)gcj02,設(shè)置返回的定位結(jié)果坐標(biāo)系
int span=1000;
option.setScanSpan(span);//可選,默認(rèn)0,即僅定位一次,設(shè)置發(fā)起定位請求的間隔需要大于等于1000ms才是有效的
option.setIsNeedAddress(true);//可選,設(shè)置是否需要地址信息,默認(rèn)不需要
option.setOpenGps(true);//可選,默認(rèn)false,設(shè)置是否使用gps
option.setLocationNotify(true);//可選,默認(rèn)false,設(shè)置是否當(dāng)gps有效時按照1S1次頻率輸出GPS結(jié)果
option.setIsNeedLocationDescribe(true);//可選,默認(rèn)false,設(shè)置是否需要位置語義化結(jié)果,可以在BDLocation.getLocationDescribe里得到,結(jié)果類似于“在北京天安門附近”
option.setIsNeedLocationPoiList(true);//可選,默認(rèn)false,設(shè)置是否需要POI結(jié)果,可以在BDLocation.getPoiList里得到
option.setIgnoreKillProcess(false);//可選,默認(rèn)true,定位SDK內(nèi)部是一個SERVICE,并放到了獨立進(jìn)程,設(shè)置是否在stop的時候殺死這個進(jìn)程,默認(rèn)不殺死
option.SetIgnoreCacheException(false);//可選,默認(rèn)false,設(shè)置是否收集CRASH信息,默認(rèn)收集
option.setEnableSimulateGps(false);//可選,默認(rèn)false,設(shè)置是否需要過濾gps仿真結(jié)果,默認(rèn)需要
locationClient.setLocOption(option);
}
至此所有步驟完成,可以嘗試運行一下!
在Android Studio中使用BaiduMap SDK實時獲取當(dāng)?shù)匚恢眯畔⒌南嚓P(guān)知識就給大家介紹到這里,希望對大家有所幫助!
相關(guān)文章
-
詳解Retrofit2.0 公共參數(shù)(固定參數(shù))
這篇文章主要介紹了Retrofit2.0 公共參數(shù)(固定參數(shù)),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧 2018-04-04
-
解決Android 5.1限制外置SD卡寫入權(quán)限的問題
今天小編就為大家分享一篇解決Android 5.1限制外置SD卡寫入權(quán)限的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧 2018-08-08
-
Android學(xué)習(xí)之AppWidget高級效果
這篇文章主要為大家詳細(xì)介紹了Android學(xué)習(xí)之AppWidget高級效果的相關(guān)資料,感興趣的小伙伴們可以參考一下 2016-08-08
-
Android中RecyclerView實現(xiàn)商品分類功能
這篇文章主要為大家詳細(xì)介紹了Android中RecyclerView實現(xiàn)商品分類功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下 2022-02-02
-
解決RecyclerView無法onItemClick問題的兩種方法
這篇文章主要介紹了解決RecyclerView無法onItemClick問題的相關(guān)知識,非常不錯,具有參考借鑒價值,感興趣的朋友一起看下吧 2016-07-07
-
Android中創(chuàng)建類似Instagram的漸變背景效果
這篇文章主要介紹了Android中創(chuàng)建類似Instagram的漸變背景效果,本文通過實例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下 2017-12-12
-
Android Viewpager實現(xiàn)輪播廣告圖
這篇文章主要為大家詳細(xì)介紹了Android Viewpager實現(xiàn)輪播廣告圖,具有一定的參考價值,感興趣的小伙伴們可以參考一下 2018-05-05
-
Android實現(xiàn)瘋狂連連看游戲之實現(xiàn)游戲邏輯(五)
這篇文章主要為大家詳細(xì)介紹了Android實現(xiàn)瘋狂連連看游戲之實現(xiàn)游戲邏輯,具有一定的參考價值,感興趣的小伙伴們可以參考一下 2017-03-03
最新評論
配置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-data android:name="com.baidu.lbsapi.API_KEY" android:value="這里是你申請的AppKey" />
然后緊接著需要注冊一個專門供BaiDuMap使用的service(自己不用實現(xiàn)):
<service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote"/>
最后再配置權(quán)限,定位所需要用到的一系列權(quán)限(這一塊在官方文檔上也是有的):
<!-- 這個權(quán)限用于進(jì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信息會用于進(jìn)行網(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信息會用來進(jìn)行網(wǎng)絡(luò)定位--> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/> <!-- 用于讀取手機(jī)當(dāng)前的狀態(tài)--> <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <!-- 寫入擴(kuò)展存儲,向擴(kuò)展卡寫入數(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用來存放自己定位的信息:
<TextView android: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{ @Override public 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();//初始化LocationgClient button.setOnClickListener(new View.OnClickListener() { @Override public 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 );//可選,默認(rèn)高精度,設(shè)置定位模式,高精度,低功耗,僅設(shè)備 option.setCoorType("bd09ll");//可選,默認(rèn)gcj02,設(shè)置返回的定位結(jié)果坐標(biāo)系 int span=1000; option.setScanSpan(span);//可選,默認(rèn)0,即僅定位一次,設(shè)置發(fā)起定位請求的間隔需要大于等于1000ms才是有效的 option.setIsNeedAddress(true);//可選,設(shè)置是否需要地址信息,默認(rèn)不需要 option.setOpenGps(true);//可選,默認(rèn)false,設(shè)置是否使用gps option.setLocationNotify(true);//可選,默認(rèn)false,設(shè)置是否當(dāng)gps有效時按照1S1次頻率輸出GPS結(jié)果 option.setIsNeedLocationDescribe(true);//可選,默認(rèn)false,設(shè)置是否需要位置語義化結(jié)果,可以在BDLocation.getLocationDescribe里得到,結(jié)果類似于“在北京天安門附近” option.setIsNeedLocationPoiList(true);//可選,默認(rèn)false,設(shè)置是否需要POI結(jié)果,可以在BDLocation.getPoiList里得到 option.setIgnoreKillProcess(false);//可選,默認(rèn)true,定位SDK內(nèi)部是一個SERVICE,并放到了獨立進(jìn)程,設(shè)置是否在stop的時候殺死這個進(jìn)程,默認(rèn)不殺死 option.SetIgnoreCacheException(false);//可選,默認(rèn)false,設(shè)置是否收集CRASH信息,默認(rèn)收集 option.setEnableSimulateGps(false);//可選,默認(rèn)false,設(shè)置是否需要過濾gps仿真結(jié)果,默認(rèn)需要 locationClient.setLocOption(option); }
至此所有步驟完成,可以嘗試運行一下!
在Android Studio中使用BaiduMap SDK實時獲取當(dāng)?shù)匚恢眯畔⒌南嚓P(guān)知識就給大家介紹到這里,希望對大家有所幫助!
相關(guān)文章
詳解Retrofit2.0 公共參數(shù)(固定參數(shù))
這篇文章主要介紹了Retrofit2.0 公共參數(shù)(固定參數(shù)),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-04-04解決Android 5.1限制外置SD卡寫入權(quán)限的問題
今天小編就為大家分享一篇解決Android 5.1限制外置SD卡寫入權(quán)限的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-08-08Android學(xué)習(xí)之AppWidget高級效果
這篇文章主要為大家詳細(xì)介紹了Android學(xué)習(xí)之AppWidget高級效果的相關(guān)資料,感興趣的小伙伴們可以參考一下2016-08-08Android中RecyclerView實現(xiàn)商品分類功能
這篇文章主要為大家詳細(xì)介紹了Android中RecyclerView實現(xiàn)商品分類功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-02-02解決RecyclerView無法onItemClick問題的兩種方法
這篇文章主要介紹了解決RecyclerView無法onItemClick問題的相關(guān)知識,非常不錯,具有參考借鑒價值,感興趣的朋友一起看下吧2016-07-07Android中創(chuàng)建類似Instagram的漸變背景效果
這篇文章主要介紹了Android中創(chuàng)建類似Instagram的漸變背景效果,本文通過實例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2017-12-12Android Viewpager實現(xiàn)輪播廣告圖
這篇文章主要為大家詳細(xì)介紹了Android Viewpager實現(xiàn)輪播廣告圖,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-05-05Android實現(xiàn)瘋狂連連看游戲之實現(xiàn)游戲邏輯(五)
這篇文章主要為大家詳細(xì)介紹了Android實現(xiàn)瘋狂連連看游戲之實現(xiàn)游戲邏輯,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-03-03