Android開發百度地圖(一)之初體驗

本文系做者原創,如需轉載請註明出處!java

1、概述

我來如今這家公司前是面試的java,公司招聘的也是java。結果上班以後,給我一個U盤,裏面是Android的Eclipse開發環境,讓我作Android?天啦嚕,我壓根不會,而後就自學咯!邊百度邊、看文檔操做,開始上手了,而後才知道谷歌對Eclipse已經中止更新,推出了AndroidStudio,而後公司用的仍是Eclipse中的Android4.2版本。上述就是我爲啥用Eclipse開發APP,就別說我啥不追隨技術更新...反正這個月底我也走人了,固然最主要的是公司電腦根本帶不動AndroidStudio,進入正題android

我選擇百度地圖是有緣由的,它確實在使用上來講(固然除了那可怕的「推廣」、「全家桶」),仍是很不錯的!因此致使我很喜歡谷歌地圖面試

注意:因爲谷歌對Eclipse的ADT中止更新以及百度地圖API的緣由,百度地圖SDK3.7(不包含)以上版本不支持低版本的ADT(編譯經過,但app閃退,提示沒法初始化SDK,未找到該類),至於版本幾,沒測試。目前知道的是ADT23.7是支持。我如今的環境是ADT23.七、Android6.0api

1、正文

一、先去百度地圖API官網註冊賬號而且申請API KEY——百度地圖開放平臺
進入API控制檯中心建立應用微信

Paste_Image.png

按照要求填寫網絡

Paste_Image.png

發佈版SHA1:是建立的android.keystore中的查詢出來的,打了碼的那玩意兒就是發佈版SHA1,使用CMD進入該文件目錄,鍵入app

keytool -list -keystore debug.keystore

Paste_Image.png

開發版SHA1:在Eclipse>Window>Preferences>Android>Build,打了馬賽克那玩意兒ide

Paste_Image.png

包名:在AndroidManifest.xml文件中查看測試

Paste_Image.png

建立成功後最後會獲得這一串keyui

Paste_Image.png

二、下載SDK包
進入百度地圖SDK中能夠自定義下載開發包、示例代碼和文檔。

三、基本配置
1> 導入庫
將libs jar包導入到項目中,還有so文件,把so文件放到armeabi文件夾,jar包放到libs文件夾,以下圖所示:

Paste_Image.png

2> 配置key及權限

打開AndroidManifest.xml文件,添加如下權限:

<!-- 系統設置權限 -->
    <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
    <!-- 這個權限用於進行網絡定位 -->
    <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" />
    <!-- 用於讀取手機當前的狀態 -->
    <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" />

而後在application裏面添加key和定位服務

<meta-data
    android:name="com.baidu.lbsapi.API_KEY"
    android:value="申請的key值" />

<service
    android:name="com.baidu.location.f"
    android:enabled="true"
    android:process=":remote" >
</service>

而後就完成了基本配置,以後就能夠開始擼代碼了

四、開始擼代碼

第一步,在主界面main.xml添加地圖視圖

<com.baidu.mapapi.map.MapView
            android:id="@+id/bmapView"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:clickable="true" />

第二步,建立MApplication.java進行初始化地圖相關,在AndroidManifest.xml文件application中添加:

android:name="該類所在路徑"

看如下官方截圖中框框部分註釋

Paste_Image.png

官方這樣說道「在使用SDK各組件以前初始化context信息,傳入ApplicationContext。注意該方法要在再(有個錯別字)setContentView方法以前實現」,咱們知道,實現Application後,當應用程序啓動時,它首先執行的是Application實現類的onCreate(Bundle saveInstanceState)方法,是在Activity實現類以前,因此適合進行初始化地圖相關。

固然,你要是在Activity中也是能夠的

/** 
 * 描述:APP應用程序  <br>
 * 做者: kimball <br>
 * E-mail: kimballlu@foxmail.com <br>
 * 日期: 2017年3月7日 下午6:05:54 <br>
 */
public class MApplication extends Application {
        
    /**
     * 上下文對象
     */
    public static Context context;
        
    @Override
    public void onCreate() {
        super.onCreate();
        //在使用SDK各組件以前初始化context信息,傳入ApplicationContext  
            //注意該方法要再setContentView方法以前實現 
        SDKInitializer.initialize(this.getApplicationContext());
    }
    
}

第三步,建立BaseActivity.java,繼承AppCompatActivity(該類我是放一些Activity通用的東東的,後面會用到)

/** 
 * 描述:Activity  <br>
 * 做者: kimball <br>
 * E-mail: kimballlu@foxmail.com <br>
 * 日期: 2017年3月10日 上午9:47:04 <br>
 */
public class BaseActivity extends AppCompatActivity {
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);        
    }
    
}

第四步,ManActivity.java,繼承BaseActivity.java

public class MainActivity extends BaseActivity {
    
    // 地圖相關
    private MapView mapView;    // 地圖控件

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.setContentView(R.layout.main);
        // 初始化
        this.init();
    }
    
    /**
     * 初始化
     */
    private void init(){
        // 初始化控件
        this.initControls();
        // 初始化地圖
        this.initMap();
    }
    
    /**
     * 初始化控件
     */
    private void initControls(){
        // 獲取地圖視圖
        this.mapView = (MapView) findViewById(R.id.bmapView);
    }
    
    /**
     * 初始化地圖
     */
    private void initMap(){
        // 不顯示百度地圖Logo
        mapView.removeViewAt(1);
        // 不顯示地圖上比例尺    
        mapView.showScaleControl(false);    
        // 不顯示地圖縮放控件(按鈕控制欄)    
        mapView.showZoomControls(false);
        // 獲取百度地圖對象
        baiduMap = mapView.getMap();
        baiduMap.setMyLocationEnabled(true);
        // 設置爲通常地圖
        baiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);             
        // 設置初始大圖大小500米        
        MapStatusUpdate msu = MapStatusUpdateFactory.zoomTo(15.0f); 
        baiduMap.setMapStatus(msu);
    }
   
    /**
     * 當Activity處於可見狀態時運行
     */
    @Override
    protected void onStart() {
        super.onStart();
    }
    
    /**
     * Activity銷燬時運行
     */
    @Override
    protected void onDestroy() {
        super.onDestroy();
        // 管理地圖的生命週期:銷燬
        if(mapView != null){
            mapView.onDestroy();
        }
    }

    /**
     * Activity能夠獲得用戶焦點時運行
     */
    @Override
    protected void onResume() {
        super.onResume();
        // 顯示
        if(mapView != null){
            mapView.onResume();
        }
    }

    /**
     * Activity被遮擋住時運行
     */
    @Override
    protected void onPause() {
        super.onPause();
        // 暫停
        if(mapView != null){
            mapView.onPause();
        }
    }
    
    /**
     * Activity處於不可見狀態時運行
     */
    @Override
    protected void onStop() {
        super.onStop();
    }
    
}

五、執行效果
效果圖引用官方例子圖片,由於如今這個app進度已經快了好多,效果圖已經不適用,大同小異,將就看看吧!

Paste_Image.png

六、注意事項
a,要是出現白色小方格,地圖不顯示,請檢查key配置是否正確
b,要是出現一開啓應用程序就閃退並報未能找到SDKInitializer類類似的問題,請檢查libs導入是否正確。如仍是不能解決,請參考文章開頭所說的描述

3、結語

到這裏初體驗就已經結束了,是否是很簡單?沒事兒,後面咱們再慢慢深刻。
說實話,這篇文章我花了一個多星期才寫好,說次日就寫好,結果我看了一天的歷史,後面又看了幾天。說次日就寫好,結果我寫app又花了好多天。說次日寫好,結果浪着浪着時間又過去。我不是在找藉口啊!沒有,絕對沒有的事兒!
這篇實際上是我在寫一個app(等寫好後開源的一個小項目,受不了一些地圖無所謂的功能,咱們是有「態度」的青年,對不對?)開始寫的,而後而後,就各類緣由啊!天時地利人和都不沾邊啥的,但這沒有關係,我會盡快讓文章跟上app進度的,嗯,相信我

PS您還能夠關注個人微信公衆號:kimball我的小站:www.kimball.site新浪微博:kimball-lu知乎:kimball

相關文章
相關標籤/搜索