Android關(guān)于百度地圖AndroidSDK幾處修正使用說明(非官方)

本篇主要是因?yàn)樽罱趯W(xué)習(xí)使用百度地圖,發(fā)現(xiàn)了一些問題,跟大伙分享一下。

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名與空間、雅安服務(wù)器托管、營銷軟件、網(wǎng)站建設(shè)、羅甸網(wǎng)站維護(hù)、網(wǎng)站推廣。

1、根據(jù)android sdk開發(fā)指南中“Hello World”的例子,構(gòu)建一個(gè)基礎(chǔ)的地圖頁面,如果大家完全按照示例代碼中所寫的那樣,是不會執(zhí)行成功的,會有以下問題的錯(cuò)誤提示“java.lang.RuntimeException: Unable to instantiate activity ComponentInfo”

這個(gè)問題出現(xiàn)的原因是

在第二步,配置Activity部分,android:name的值為.MapDemo,而在第四步,創(chuàng)建地圖Activity處,創(chuàng)建的Activity繼承類名寫的卻是MyMapActivity。如果你想讓在AndroidManifest.xml中配置Activity時(shí)的.MapDemo為起始的Activity,除了要在<Activity></Activity>之間加上以下這段代碼之外

<intent-filter>
    <actionandroid:name="android.intent.action.MAIN"/>   
    <categoryandroid:name="android.intent.category.LAUNCHER"/>
</intent-filter>

還要把a(bǔ)ndroid:name的.MapDemo改成你當(dāng)前項(xiàng)目的“包名+MyMapActivity”或者直接寫“MyMapActivity”,這樣再執(zhí)行就會構(gòu)建出一個(gè)基礎(chǔ)的百度地圖。

這個(gè)問題其實(shí)也是一個(gè)Android開發(fā)的基礎(chǔ)問題,也算是對我這個(gè)Android半吊子一個(gè)知識點(diǎn)的鞏固。下面針對這個(gè)問題的出現(xiàn)回顧以下知識點(diǎn):

(1)AndroidManifest.xml作為項(xiàng)目的布局文件,時(shí)時(shí)刻刻把握整個(gè)項(xiàng)目命脈,項(xiàng)目啟動時(shí),要設(shè)置啟動項(xiàng),權(quán)限不夠時(shí),要加相應(yīng)的權(quán)限設(shè)置。

(2)在AndroidManifest.xml中配置的Activity如何與src中的.java文件聯(lián)系在一起呢?就是依靠配置的該Activity中的android:name的值要完全與.java文件中的類名一致。

(3)而“后臺”的.java文件又是如何與“前臺”的res/layout中的activity布局文件聯(lián)系在一起的呢(請?jiān)试S我用前后臺這樣的非專業(yè)術(shù)語來說,因?yàn)樽约褐髯鰓eb開發(fā),這樣說感覺比較形象)?就是通過.java文件中,繼承Activity類的新類的OnCreate方法中

setContentView(R.layout.activity_main)

這樣的一條語句搞定的,這里的activity_main即是布局文件的名字而已。

由以上的幾條我們會發(fā)現(xiàn)Android開發(fā)中,主要的兩個(gè)東西都是靠名稱去匹配的,所以我們在開發(fā)中一定要在這方面多多注意,至于是不是其他的東西也是依賴名稱去匹配,就需要我們?nèi)ゲ粩嘣陂_發(fā)中發(fā)現(xiàn)。

2、說的第二個(gè)問題是關(guān)于坐標(biāo)的,在百度地圖給出的源碼中,我們會發(fā)現(xiàn)類似這樣的語句

GeoPoint point =new GeoPoint((int)(39.915* 1E6),(int)(116.404* 1E6));

翻譯一下就是創(chuàng)建一個(gè)GeoPoint類型的緯度為39.915度,經(jīng)度為116.404度的坐標(biāo)點(diǎn),為什么要*1E6,是為了把傳入的經(jīng)度,緯度轉(zhuǎn)換成微度,就是在原基礎(chǔ)上乘以10的-6次冪。至于GeoPoint中到底是什么樣,那都是百度封裝好的,所以我也懶著去關(guān)心了,大家知道跟坐標(biāo)點(diǎn)有關(guān)就行了。

不過這里容易出現(xiàn)一個(gè)小問題,就是我們習(xí)慣性的會認(rèn)為寫坐標(biāo)點(diǎn)的時(shí)候是這種格式“經(jīng)度,緯度”,而這個(gè)方法的構(gòu)造函數(shù)完全是相反的。當(dāng)然,這不算什么,但是問題就出在,在百度地圖官方給出的“拾取坐標(biāo)系統(tǒng)”工具(鏈接:http://api.map.baidu.com/lbsapi/getpoint/index.html,這個(gè)東東還是很實(shí)用的,如果我們做地圖開發(fā)沒有它,那就沒戲啦,它主要就是坐標(biāo)-地址的查詢工具)中,使用的坐標(biāo)點(diǎn)形式就是“經(jīng)度,緯度”,有點(diǎn)把我們帶偏的感覺。所以容易搞錯(cuò),這塊要注意一下,否則坐標(biāo)都在十萬八千里之外了。

PS:經(jīng)度(longitude),緯度(latitude)

3、關(guān)于定位SDK的,這個(gè)問題真心的很坑人。下午耗了幾個(gè)小時(shí),真不爽。

雖然標(biāo)題說的是android sdk,

在百度地圖官方定位SDK處可謂是非常詳細(xì),把如何構(gòu)建基礎(chǔ)定位功能的步驟已經(jīng)詳細(xì)給我們列出,但這里有個(gè)小瑕疵我不得不說,達(dá)到了令人發(fā)指的地步。

先來簡單回顧一下百度地圖官方給出的東東

在V4.1版本的第3點(diǎn),功能類的使用,3.1.1初始化LocationClient類 小節(jié)

public LocationClient mLocationClient = null;
public BDLocationListener myListener = new MyLocationListener();
               
publicvoid onCreate() {
    mLocationClient = new LocationClient(getApplicationContext());     //聲明LocationClient類
    mLocationClient.registerLocationListener( myListener );    //注冊監(jiān)聽函數(shù)
}

3.1.3設(shè)置定位參數(shù)小節(jié)

LocationClientOption option = new LocationClientOption();
option.setLocationMode(LocationMode.Hight_Accuracy);//設(shè)置定位模式
option.setCoorType("bd09ll");//返回的定位結(jié)果是百度經(jīng)緯度,默認(rèn)值gcj02
option.setScanType(5000);//設(shè)置發(fā)起定位請求的間隔時(shí)間為5000ms
option.setIsNeedAddress(true);//返回的定位結(jié)果包含地址信息
option.setNeedDeviceDirect(true);//返回的定位結(jié)果包含手機(jī)機(jī)頭的方向
mLocClient.setLocOption(option);

對了這處的第4行setScanType方法請改寫成setScanSpan。之所以寫錯(cuò)可能是先前版本的成員方法名,在這個(gè)版本中已經(jīng)不再存在。

3.1.4發(fā)起定位請求小節(jié)

if (mLocClient != null && mLocClient.isStarted())
  mLocClient.requestLocation();
else
 Log.d("LocSDK3", "locClient is null or not started");

乍一看條理非常的清晰,先聲明類,綁定方法,如果有特殊要求,再加個(gè)option的設(shè)置,最后驗(yàn)證對象是否為空,不為空就執(zhí)行最終的請求定位,多完美?。

但是如果我們就這樣執(zhí)行了,那么就會發(fā)現(xiàn)log中一直出現(xiàn)“l(fā)ocClient is null or not started”這句話,我試了N多遍,都有了想吐血的沖動(請?jiān)徫业耐虏郏?,最后通過對定位sdk的sample一行一行去找才發(fā)現(xiàn)了問題(之所以一行一行的找,是因?yàn)榘秧?xiàng)目導(dǎo)入本地工程之后,各種紅,運(yùn)行不了),原因就在于,在對LocationClient類實(shí)例調(diào)用requestLocation()方法之前,一定要調(diào)用一下start()方法,像這樣:

mLocationClient.start();

哦~~那是什么?對的,開發(fā)指南中并沒有寫出來。應(yīng)該是一個(gè)使LocationClient實(shí)例啟動的方法,所以后面if條件句中的isStarted()我們也就明白是怎么回事了。

4、接著說一下如何成功在本地運(yùn)行Android SDK給出的“BaiduMap_AndroidSDK_v2.4.1_Sample”示例,這是官方的一個(gè)Demo,為我們展示了在Android SDK下的各個(gè)功能模塊。

如果大家細(xì)心讀了百度地圖的使用規(guī)則,就知道如果我們想使用百度地圖API,就必須申請對應(yīng)的KEY,而申請KEY的關(guān)鍵,我總結(jié)的話就是在安全碼上,下面只說Android SDK安全碼組成:數(shù)字簽名+;+包名。

其實(shí)這部分百度地圖申請KEY的《查看詳細(xì)配置方法》里已經(jīng)詳細(xì)說明。我只是想說這里的包名,要寫成我們下載下來的示例包名:baidumapsdk.demo。

這塊可能對大多數(shù)朋友來說順理成章,我之所以說一下是因?yàn)榈谝淮紊暾圞EY,而且是先創(chuàng)建了一個(gè)本地項(xiàng)目,又沒有直接去運(yùn)行Sample,所以當(dāng)時(shí)就有點(diǎn)懵,誤把針對自己項(xiàng)目的KEY當(dāng)成可以在Sample上使用的KEY。

這塊大家沒遇到這個(gè)問題就從腦子里抹去吧。

隨著一步步的探索,慢慢的就能跟隨自己的想法來使用百度地圖去設(shè)計(jì)一些小功能了,之后也遇到了一些問題,不過感覺解決的都很快,這里就不一一詳述了,都是些小問題。如果大家遇到其他Android SDK上的問題比較頭大,我們可以交流一下。

另外,這幾天通過對百度地圖API的學(xué)習(xí),也看到了差距,自己還是要不斷的去學(xué)習(xí),提升自己,向度娘看齊。

分享名稱:Android關(guān)于百度地圖AndroidSDK幾處修正使用說明(非官方)
網(wǎng)站URL:http://muchs.cn/article16/ighsgg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開發(fā)網(wǎng)站設(shè)計(jì)、面包屑導(dǎo)航網(wǎng)站制作、網(wǎng)站收錄、自適應(yīng)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站