編輯:關於Android編程
配置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:
<meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="這裡是你申請的AppKey" />
然後緊接著需要注冊一個專門供BaiDuMap使用的service(自己不用實現):
<service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote"/>
最後再配置權限,定位所需要用到的一系列權限(這一塊在官方文檔上也是有的):
<!-- 這個權限用於進行網絡定位--> <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用來存放自己定位的信息:
<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控件和其他方法類:
private TextView textView = null; private Button button = null; private LocationClient locationClient = null; public BDLocationListener myListener = new MyBdlocationListener();
實現BDLocationListener(裡面的一些判斷可以自己去考慮和添加或者需要什麼定位信息自行去嘗試,這裡只是得到了當前地址):
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
);//可選,默認高精度,設置定位模式,高精度,低功耗,僅設備
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實時獲取當地位置信息的相關知識就給大家介紹到這裡,希望對大家有所幫助!
ActionBar 樣式詳解 -- 樣式 主題 簡介
1. 樣式資源解析(1) 樣式簡介樣式解析: 樣式是設置給 View 組件的多個屬性的集合;--樣式的好處: 給一個 TextView 設置 文字大小, 顏色, 對齊方式
Android觸摸事件分發機制
Android中的事件分為按鍵事件和觸摸事件,這裡對觸摸事件進行闡述。Touch事件是由一個ACTION_DOWN,n個ACTION_MOVE,一個ACTION_UP組成
從源碼角度帶你分析 Android View 事件分發 dispatchTouchEvent,onTouch,onTouchEvent,onClick邏輯順序過程(一)
關於Android View 事件分發過程的文章網絡上可以搜到一把大,這裡貼一篇代碼性的文章,作者也是個牛人:Android事件分發機制完全解析,帶你從源碼的角度徹底理解
Android學習筆記(十二)——使用意圖傳遞數據的幾種方式
使用意圖傳遞數據的幾種方式 點此獲取完整代碼 我們除了要從活動返回數據,也常常要傳遞數據給活動。對此我們可以使用Intent對象將這些數據傳遞給目標活動。