安卓地图开发
安卓地圖
獲取密鑰
登錄后將進入API控制臺,
在app目錄下的build.gradle文件中找到applicationId,并確保其值與AndroidManifest.xml中定義的package相同。
獲取SHA1
進入Terminal工具
找到.android文件夾下的debug.keystroe
輸入默認密碼android,查看SHA1
百度地圖開發包
開發文檔->Android 地圖SDK->產品下載->自定義下載
在app目錄下的build.gradle文件中android塊中配置sourceSets標簽
選擇模塊視圖為Project,解壓文件夾至項目libs
右鍵BaiduLBS_Android.jar選擇Add As Library
顯示地圖
在application中加入如下代碼配置開發密鑰(AK):
在這里插入代碼片<application> <meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="開發者 key" /> </application>appliancation外部添程序
<!-- 訪問網絡,進行地圖相關業務數據請求,包括地圖數據,路線規劃,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" />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" />其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);} }創建地圖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(); } }@定位地圖
AndroidManifest.xml文件
<!-- 這個權限用于進行網絡定位 --> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <!-- 這個權限用于訪問GPS定位 --> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />聲明定位的service組件
<service android:name="com.baidu.location.f"android:enabled="true"android:process=":remote"/>xml
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".MainActivity"><!--百度地圖控件--><com.baidu.mapapi.map.MapViewandroid:id="@+id/bmapView"android:layout_width="fill_parent"android:layout_height="fill_parent"android:clickable="true" /><LinearLayoutandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:background="#e0000000"android:orientation="vertical"><LinearLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="12dp"android:layout_marginTop="20dp"android:orientation="horizontal"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="緯度:"android:textColor="#ffffff"android:textSize="15dp" /><TextViewandroid:id="@+id/tv_Lat"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text=""android:textColor="#ffffff"android:textSize="15dp" /></LinearLayout><LinearLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="12dp"android:layout_marginTop="10dp"android:orientation="horizontal"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="經度:"android:textColor="#ffffff"android:textSize="15dp" /><TextViewandroid:id="@+id/tv_Lon"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text=""android:textColor="#ffffff"android:textSize="15dp" /></LinearLayout><LinearLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="12dp"android:layout_marginTop="10dp"android:layout_marginBottom="10dp"android:orientation="horizontal"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="地址:"android:textColor="#ffffff"android:textSize="15dp" /><TextViewandroid:id="@+id/tv_Add"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text=""android:textColor="#ffffff"android:textSize="15dp" /></LinearLayout></LinearLayout> </FrameLayout>地圖數據
繼承抽象類BDAbstractListener并重寫其onReceieveLocation方法來獲取定位數據
public class MyLocationListener extends BDAbstractLocationListener {private MapView mMapView;private BaiduMap mBaiduMap;private LocationClient mLocationClient;private boolean isFirstLocate = true;private LocationClientOption option;TextView tv_Lat; //緯度TextView tv_Lon; //經度TextView tv_Add; //地址//構造方法用于傳遞地圖控件public MyLocationListener(MapView mMapView, BaiduMap mBaiduMap, LocationClient mLocationClient,TextView tv_Lat, TextView tv_Lon, TextView tv_Add,LocationClientOption option) {this.mMapView = mMapView;this.mBaiduMap = mBaiduMap;this.mLocationClient=mLocationClient;this.tv_Lat=tv_Lat;this.tv_Lon=tv_Lon;this.tv_Add=tv_Add;this.option=option;}@Overridepublic void onReceiveLocation(BDLocation location) {//mapView 銷毀后不在處理新接收的位置if (location == null || mMapView == null){return;}tv_Lat.setText(location.getLatitude()+"");tv_Lon.setText(location.getLongitude()+"");tv_Add.setText(location.getAddrStr());if(location.getLocType()==BDLocation.TypeGpsLocation || location.getLocType()==BDLocation.TypeNetWorkLocation){navigateTo(location);}MyLocationData locData = new MyLocationData.Builder().accuracy(location.getRadius())// 此處設置開發者獲取到的方向信息,順時針0-360.direction(location.getDirection()).latitude(location.getLatitude()).longitude(location.getLongitude()).build();mBaiduMap.setMyLocationData(locData);}private void navigateTo(BDLocation location) {if(isFirstLocate){LatLng ll = new LatLng(location.getLatitude(),location.getLongitude());MapStatusUpdate update = MapStatusUpdateFactory.newLatLng(ll);mBaiduMap.animateMapStatus(update);isFirstLocate = false;}} }```javamLocationClient = new LocationClient(this);//通過LocationClientOption設置LocationClient相關參數LocationClientOption option = new LocationClientOption();//option.setOpenGps(true); // 打開gpsoption.setCoorType("bd09ll"); // 設置坐標類型option.setScanSpan(1000);//設置定位模式,三選一option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);//設置需要地址信息option.setIsNeedAddress(true);//設置locationClientOptionmLocationClient.setLocOption(option);//注冊LocationListener監聽器MyLocationListener myLocationListener = new MyLocationListener(mMapView,mBaiduMap,mLocationClient,tv_Lat,tv_Lon,tv_Add,option);mLocationClient.registerLocationListener(myLocationListener);//開啟地圖定位圖層mLocationClient.start();截圖
感悟
就是在編寫地圖導航模塊的時候,在初始化驗證驗證key以及初始化百度地圖導航的引擎的時候,會一直
出現“初始化百度導航引擎失敗”。
原因:第一種是相應的jar包沒有導入完全,第二種就是在assets文件夾內的資源文件沒有
解決辦法:1、補全相應的jar包;2、把官方demo中的assets文件夾中的資源文件全部拷貝到項目工程中。
總結
- 上一篇: 前端学习(3169):react-hel
- 下一篇: react(79)--ant desig