安卓实现百度地图定位
參考網址:Android地圖SDK | 百度地圖API SDK (baidu.com)
一.獲取SHA1
Android Studio場景使用keytool
1.進入控制臺(以Mac為例,Windows則進入cmd控制臺,同樣執行下述命令),執行”cd .android”定位到”.android”文件夾下。
2.繼續在控制臺輸入命令:
調試版本使用指令:keytool -list -v -keystore debug.keystore
發布版本請使用指令:keytool -list -v -keystore apk 的 keystore
3.輸入口令:
調試版本默認密碼是: android,發布模式的密碼是apk的keystore設置的密碼。輸入密鑰后回車(如果沒設置密碼,可直接回車),此時可在控制臺顯示的信息中獲取SHA1值
二.獲取開發密鑰(AK)
申請步驟大致可分為如下四個步驟:
1.登錄百度賬號
2.登錄后將進入API控制臺
3.點擊“創建應用”開始申請開發密鑰
4.填寫應用名稱,注意應用類型選擇“Android SDK”、正確填寫SHA1 和 程序包名(SHA1和包名的獲取方法見下文)。
由此得到密鑰為:h24DvMjjnPgVYVYEYEUDWEL3TaDGni1m
?三.Android Studio配置
1.下載SDK本地依賴
2.將開發包拷貝至工程
????????1、添加jar文件
? ? ?????????打開解壓后的開發包文件夾,找到BaiduLBS_Android.jar文件將其拷貝至工程的app/libs目錄下
? ? ? ??2、添加so文件
? ? ? ? ? ????在下載的開發包中拷貝需要的CPU架構對應的so文件文件夾到app/libs目錄下,在app目錄下的build.gradle文件中android塊中配置sourceSets標簽,如果沒有使用該標簽則新增,詳細配置代碼如下:
sourceSets {main {jniLibs.srcDir 'libs'}} 3.往工程中添加jar文件 在工程配置中需要將前面添加的jar文件集成到我們的工程中。 在libs目錄下,選中每一個jar文件(此處只有一個BaiduLbs_Android.jar)右鍵,選擇Add As Library… 此時會發現在app目錄的build.gradle的dependencies塊中生成了工程所依賴的jar文件的對應說明,如下所示:?四.顯示地圖
1第一步 配置AndroidManifest.xml文件
????????1.在<application>中加入如下代碼配置開發密鑰(AK):
<application> <meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="開發者 key" /> </application>開發者 key對應你之前申請的密鑰AK?
????????2. 在<application/>外部添加如下權限聲明:
<!-- 訪問網絡,進行地圖相關業務數據請求,包括地圖數據,路線規劃,POI檢索等 --> <uses-permission android:name="android.permission.INTERNET" /> <!-- 獲取網絡狀態,根據網絡狀態切換進行數據請求網絡轉換 --> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><!-- 讀取外置存儲。如果開發者使用了so動態加載功能并且把so文件放在了外置存儲區域,則需要申請該權限,否則不需要 --> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <!-- 寫外置存儲。如果開發者使用了離線地圖,并且數據寫在外置存儲區域,則需要申請該權限 --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />2第二步 在布局文件中添加地圖容器
MapView是View的一個子類,用于在Android View中放置地圖。MapView的使用方法與Android提供的其他View一樣。
<com.baidu.mapapi.map.MapView android:id="@+id/bmapView" android:layout_width="match_parent" android:layout_height="match_parent" android:clickable="true" />3第三步 地圖初始化
注意:在SDK各功能組件使用之前都需要調用“SDKInitializer.initialize(getApplicationContext())”,因此建議在應用創建時初始化SDK引用的Context為全局變量。
新建一個自定義的Application,在其onCreate方法中完成SDK的初始化。示例代碼如下:
public class DemoApplication extends Application {@Overridepublic void onCreate() {super.onCreate();//在使用SDK各組件之前初始化context信息,傳入ApplicationContext SDKInitializer.initialize(this);//自4.3.0起,百度地圖SDK所有接口均支持百度坐標和國測局坐標,用此方法設置您使用的坐標類型.//包括BD09LL和GCJ02兩種坐標,默認是BD09LL坐標。SDKInitializer.setCoordType(CoordType.BD09LL);} }4創建地圖Activity,管理MapView生命周期
注意:在項目中使用地圖的時候要特別注意合理地管理地圖生命周期,這非常重要。
以下示例代碼簡述對地圖生命周期的管理:
public class MainActivity extends Activity { private MapView mMapView = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //獲取地圖控件引用 mMapView = (MapView) findViewById(R.id.bmapView); } @Override protected void onResume() { super.onResume(); //在activity執行onResume時執行mMapView. onResume (),實現地圖生命周期管理 mMapView.onResume(); } @Override protected void onPause() { super.onPause(); //在activity執行onPause時執行mMapView. onPause (),實現地圖生命周期管理 mMapView.onPause(); } @Override protected void onDestroy() { super.onDestroy(); //在activity執行onDestroy時執行mMapView.onDestroy(),實現地圖生命周期管理 mMapView.onDestroy(); } }完成以上工作即可在應用中顯示地圖?
五.顯示定位
1確保您的開發包中包含基本定位功能,該選項在您下載開發包時默認不會被選中
2配置AndroidManifest.xml文件
1.加入如下權限使用聲明
<!-- 這個權限用于進行網絡定位 --> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <!-- 這個權限用于訪問GPS定位 --> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />2.在Application標簽中聲明定位的service組件
mBaiduMap.setMyLocationEnabled(true);3開啟地圖的定位圖層
mBaiduMap.setMyLocationEnabled(true);4構造地圖數據
我們通過繼承抽象類BDAbstractListener并重寫其onReceieveLocation方法來獲取定位數據,并將其傳給MapView。
public class MyLocationListener extends BDAbstractLocationListener {@Overridepublic void onReceiveLocation(BDLocation location) {//mapView 銷毀后不在處理新接收的位置if (location == null || mMapView == null){return;}MyLocationData locData = new MyLocationData.Builder().accuracy(location.getRadius())// 此處設置開發者獲取到的方向信息,順時針0-360.direction(location.getDirection()).latitude(location.getLatitude()).longitude(location.getLongitude()).build();mBaiduMap.setMyLocationData(locData);} }5通過LocationClient發起定位
//定位初始化 mLocationClient = new LocationClient(this);//通過LocationClientOption設置LocationClient相關參數 LocationClientOption option = new LocationClientOption(); option.setOpenGps(true); // 打開gps option.setCoorType("bd09ll"); // 設置坐標類型 option.setScanSpan(1000);//設置locationClientOption mLocationClient.setLocOption(option);//注冊LocationListener監聽器 MyLocationListener myLocationListener = new MyLocationListener(); mLocationClient.registerLocationListener(myLocationListener); //開啟地圖定位圖層 mLocationClient.start();6正確管理各部分的生命周期
@Override protected void onResume() {mMapView.onResume();super.onResume(); }@Override protected void onPause() {mMapView.onPause();super.onPause(); }@Override protected void onDestroy() {mLocationClient.stop();mBaiduMap.setMyLocationEnabled(false);mMapView.onDestroy();mMapView = null;super.onDestroy(); } 完成以上工作,即可在地圖應用中顯示當前位置的藍點最后由于安卓虛擬機無法正確定位我的位置,定位到非洲的某一個地方,所以用手機連接到安卓中得到百度地圖的定位:
代碼倉庫
總結
以上是生活随笔為你收集整理的安卓实现百度地图定位的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 前端学习(3169):react-hel
- 下一篇: CMMI简介