真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

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

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

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

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

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

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


       
    

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

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

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

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

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

setContentView(R.layout.activity_main)

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

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

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

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)就行了。

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

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

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

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

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

先來(lái)簡(jiǎn)單回顧一下百度地圖官方給出的東東

在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 );    //注冊(cè)監(jiān)聽(tīng)函數(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ā)起定位請(qǐng)求的間隔時(shí)間為5000ms
option.setIsNeedAddress(true);//返回的定位結(jié)果包含地址信息
option.setNeedDeviceDirect(true);//返回的定位結(jié)果包含手機(jī)機(jī)頭的方向
mLocClient.setLocOption(option);

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

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

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

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

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

mLocationClient.start();

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

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

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

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

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

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

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

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


名稱欄目:Android關(guān)于百度地圖AndroidSDK幾處修正使用說(shuō)明(非官方)
當(dāng)前路徑:http://weahome.cn/article/ighsgg.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部