基于Android的GPS定位功能, 通過GPS定位獲取地理位置坐標(biāo), 并且解析坐標(biāo)信息向google請求坐標(biāo)的詳細(xì)位置(直接返回所在的位置信息,如城市名稱等)。

船營網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站設(shè)計等網(wǎng)站項目制作,到程序開發(fā),運(yùn)營維護(hù)。創(chuàng)新互聯(lián)從2013年創(chuàng)立到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)。
您好,很高興為您服務(wù)!安卓實(shí)現(xiàn)定位的方式有四種哦!1:高精準(zhǔn)度(使用wifi,移動數(shù)據(jù),gps)定位2:中精準(zhǔn)度(使用gps單獨(dú)定位)3:低精準(zhǔn)度(使用網(wǎng)絡(luò)大致定位)4:模擬位置(打開開發(fā)者選項允許模擬位置后您的位置是想定位在哪都可以的哦!)
您好,很高興為您解答。
一、準(zhǔn)備工作
需要如下三種軟件:
1. Eclipse
2. Android SDK
3. 開發(fā)Android程序的Eclipse 插件
為了開始我們的工作,首先要安裝Eclipse,然后從Google的網(wǎng)站獲得Android SDK,并且安裝Eclipse插件。
二、Activity類
每一種移動開發(fā)環(huán)境都有自己的基類。如J2ME應(yīng)用程序的基類是midlets,BREW的基類是applets,而Android程序的基類是 Activity。這個activity為我們提供了對移動操作系統(tǒng)的基本功能和事件的訪問。這個類包含了基本的構(gòu)造方法,鍵盤處理,掛起來恢復(fù)功能,以 及其他底層的手持設(shè)備的訪問。實(shí)質(zhì)上,我們的應(yīng)用程序?qū)⑹且粋€Activity類的擴(kuò)展。在本文中讀者將會通過例子學(xué)習(xí)到如何使用Activity類來編 寫Android程序。下面是一個簡單的繼承Activity的例子。
public?class?LocateMe?extends?Activity{??
public?void?onCreate(Bundle?params){????????
super.onCreate(params);????????
setContentView(R.layout.main);???????
}??
public?boolean?onKeyDown(int?keyCode,?KeyEvent?event){??????????
return?true;????????????
}????
}
三 View類
View類是Android的一個超類,這個類幾乎包含了所有的屏幕類型。但它們之間有一些不同。每一個view都有一個用于繪畫的畫布。這個畫布可以用 來進(jìn)行任意擴(kuò)展。本文為了方便起見,只涉及到了兩個主要的View類型:定義View和Android的XML內(nèi)容View。在上面的代碼中,使用的是 “Hello World” XML View,它是以非常自然的方式開始的。
如果我們查看一下新的Android工程,就會發(fā)現(xiàn)一個叫main.xml的文件。在這個文件中,通過一個簡單的XML文件,描述了一個屏幕的布局。這個 簡單的xml文件的內(nèi)容如下:
?xml?version="1.0"?encoding="utf-8"??
RelativeLayout?xmlns:android=""?
androidrientation="vertical"?
android:layout_width="fill_parent"?
android:layout_height="fill_parent"?
TextView?
android:layout_width="fill_parent"?
android:layout_height="wrap_content"?
android:layout_centerHoriz??
android:text="ress?the?center?key?to?locate?yourself"?
/?
/RelativeLayout
上面的內(nèi)容的功能看起來非常明顯。這個特殊文件定義了一個相關(guān)的布局,這就意味著通過一個元素到另一個元素的關(guān)系或是它們父元素的關(guān)系來描述。對于視圖來 說,有一些用于布局的方法,但是在本文中只關(guān)注于上述的xml文件。
RealtiveLayout中包含了一個填充整個屏幕的文本框(也就是我們的LocateMe activity)。這個LocateMe activity在默認(rèn)情況下是全屏的,因此,文本框?qū)⒗^承這個屬性,并且文本框?qū)⒃谄聊坏淖笊辖秋@示。另外,必須為這個XML文件設(shè)置一個引用數(shù),以便 Android可以在源代碼中找到它。在默認(rèn)情況下,這些引用數(shù)被保存在R.java中,代碼如下:
public?final?class?R{??
public?static?final?class?layout{??
public?static?final?int?main=0x7f030001;?????
}??
}
視圖也可以被嵌套,但和J2ME不同,我們可以將定制的視圖和Android團(tuán)隊發(fā)布的Widgets一起使用。在J2ME中,開發(fā)人員被迫選擇 GameCanvas和J2ME應(yīng)用程序畫布。這就意味著如果我們想要一個定制的效果,就必須在GameCanvas上重新設(shè)計我們所有的widget。 Android還不僅僅是這些,視圖類型也可以混合使用。Android還帶了一個 widget庫,這個類庫包括了滾動條,文本實(shí)體,進(jìn)度條以及其他很多控件。這些標(biāo)準(zhǔn)的widget可以被重載或被按著我們的習(xí)慣定制。現(xiàn)在讓我們來進(jìn)入 我們的例子。
四、Android實(shí)例
這個演示應(yīng)用程序?qū)⒀菔玖擞脩舻漠?dāng)前的經(jīng)度和緯度(在文本框中顯示)。onCreate構(gòu)造方法將和上面的例子基本相同,除了在其中加入了鍵盤處理,現(xiàn)在 讓我們看一下onKeyDown的代碼。
public?boolean?onKeyDown(int?keyCode,?KeyEvent?event){??
if(keyCode?!=?KeyEvent.KEYCODE_DPAD_CENTER?||?m_bLoading)??
{??
return?true;??
}??
m_bLoading?=?true;??
getLocation();??
return?true;??
}
下面讓我們來解釋一下這段代碼,首先,這段代碼檢查了當(dāng)前被按下的鍵,但還沒有開始處理。而是在getLocation方法中處理這一切的。然后,將裝載 flag標(biāo)志以及調(diào)用getLocation方法,下面是getLocation方法的代碼。
private?void?getLocation(){??
Location?loc;??
LocationManager?locMan;??
LocationProvider?locPro;??
ListLocationProvider?proList;??
setContentView(R.layout.laoding);??
locMan?=?(LocationManager)?getSystemService(LOCATION_SERVICE);??
proList?=?locMan.getProviders();??
locPro?=?proList.get(0);??
loc?=?locMan.getCurrentLocation(locPro.getName());??
Lat?=?(float)loc.getLatitude();??
Lon?=?(float)loc.getLongitude();??
CreateView();??
setContentView(customView);??
}
到這為止,程序開始變得更有趣了。但是不幸的是,Google關(guān)于之方面的文檔還是比較少了。在程序的變量聲明之后,我們需要演示一些裝載信息。 R.layout.loading符合了另一個簡單的XML布局視圖。通過簡單地調(diào)用setContentView方法可以使用轉(zhuǎn)載信息重繪屏幕。
讀者要注意的是:在編譯時,Android會預(yù)先將所有的XML布局?jǐn)?shù)據(jù)包裝起來。如果我們想在編譯后變化布局屬性,按著規(guī)定,我們必須在源程序中做這些 事。
獲得LocationManager的唯一方法是通過getSystemService()方法的調(diào)用。通過使用LocationManager, 我們可以獲得一個位置提供者的列表。在一個真實(shí)的手持設(shè)備中,這個列表包含了一些GPS服務(wù)。實(shí)際上,我們希望選擇更強(qiáng)大,更精確,最后不帶有其他附加服 務(wù)的GPS。現(xiàn)在,在模擬器中提供了一個用于測試的GPS,這個GPS來自San Francisco。定制的GPS文件可以可以被上傳,并進(jìn)行測試。如果我們要測試更復(fù)雜的應(yīng)用,來自San Francisco的GPS可能并不適合。
目前我們可以使用位置管理器和位置提供者進(jìn)行g(shù)etCurrentLocation的調(diào)用。這個方法返回本機(jī)的當(dāng)前位置的一個快照,這個快照將以 Location對象形式提供。在手持設(shè)備中,我們可以獲得當(dāng)前位置的經(jīng)度和緯度。現(xiàn)在,使用這個虛擬的手持設(shè)備,我們可以獲得這個例子程序的最終結(jié)果: 建立了顯示一個定制的視圖。
五、使用定制視圖
在最簡單的窗體中,一個Android中的視圖僅僅需要重載一個onDraw方法。定制視圖可以是復(fù)雜的3D實(shí)現(xiàn)或是非常簡單的文本形式。下面的 CreateView方法列出了上面看到的內(nèi)容。
public?void?CreateView(){??
customView?=?new?CustomView(this);??
}
這個方法簡單地調(diào)用了CustomView對象的構(gòu)造方法。CustomView類的定義如下:
public?class?CustomView?extends?View{???????
LocateMe?overlord;??
public?CustomView(LocateMe?pCtx){???????
super(pCtx);???????
overlord?=?pCtx;??
}??
public?void?onDraw(Canvas?cvs){?????
Paint?p?=?new?Paint();?????
String?sLat?=?"Latitude:?"?+?overlord.getLat();?????
String?sLon?=?"Longitude:?"?+?overlord.getLon();?????
cvs.drawText(sLat?,?32,?32,?p);?????
cvs.drawText(sLon,?32,?44,?p);??
}??
}
這個定制的Android視圖獲得了經(jīng)度和違度的測試數(shù)據(jù),并將這些數(shù)據(jù)顯示在屏幕上。這要求一個指向LocateMe的指針,Activity類是整 個應(yīng)用程序的核心。它的兩個方法是構(gòu)造方法和onDraw方法。這個構(gòu)造方法調(diào)用了超類的構(gòu)造方法以及引起了Activity指針的中斷。onDraw方 法將建立一個新的Paint對象(這個對象封裝了顏色、透明度以及其他的主題信息),這個對象將會訪問顏色主題。在本程序中,安裝了用于顯示的字符串,并 使用畫布指針將它們畫到屏幕上。這個和我們了解的J2ME游戲的畫布看起來非常類似。
六、Android展望
從純粹的開發(fā)觀點(diǎn)看,Android是一個非常強(qiáng)大的SDK。它使用基于XML的布局和定制視圖聯(lián)合了起來。并可以使用滾動條、地圖以及其他的組件。所以 的這一切都可以被重載,或由開發(fā)人員來定制。但它所提供的文檔非常粗糙。在文檔中并沒有象SMS等技術(shù),但是從整體上來看Android SDK,還是非常有希望的。也非常符合Google承諾的“First Look”SDK。現(xiàn)在我們要做的就是等待Google發(fā)布第一個基于Android的手機(jī),并使用它。
如若滿意,請點(diǎn)擊右側(cè)【采納答案】,如若還有問題,請點(diǎn)擊【追問】
希望我的回答對您有所幫助,望采納!
~?O(∩_∩)O~
這個很難實(shí)現(xiàn)房間內(nèi)定位,定位是靠檢測不同信號反射角,房間內(nèi)距離過短且墻壁反射信號,說以現(xiàn)在來說有很大難度!
以下部分摘抄:
大家都知道GPS,這個東西很強(qiáng)大,被各行各業(yè)使用。不過它也有一個很明顯的缺陷,就是在室內(nèi)不能定位,而且一般民用的精度也不夠高(10m左右),相對于室內(nèi)導(dǎo)航的要求(1m左右)還有一段距離。隨著智能手機(jī)的普及,以及移動互聯(lián)網(wǎng)的發(fā)展,地圖與導(dǎo)航類軟件將進(jìn)入一個新的時代——室內(nèi)導(dǎo)航。近幾年來,包括谷歌、微軟、蘋果、博通等在內(nèi)的一些科技巨頭,還有一些世界有名的大學(xué)都在研究室內(nèi)定位技術(shù)。
室內(nèi)定位技術(shù)的商業(yè)化必將帶來一波創(chuàng)新高潮,各種基于此技術(shù)的應(yīng)用將出現(xiàn)在我們的面前,其影響和規(guī)模絕不會亞于GPS。我們可以想象一些比較常見的應(yīng)用場景,比如在大型商場里面借助室內(nèi)導(dǎo)航快速找到出口、電梯,家長用來跟蹤小孩的位置避免小孩在超市中走丟,房屋根據(jù)你的位置打開或關(guān)閉電燈,商店根據(jù)用戶的具體位置向用戶推送更多關(guān)于商品的介紹等等。之前筆者看過諾基亞發(fā)布的一個視頻,一位商務(wù)人士將手提包落在一個商店旁,當(dāng)他走出幾米遠(yuǎn)時手機(jī)就發(fā)出了提醒。室內(nèi)定位還有很多場景可以被用上,讓我們放開思維盡情遐想吧。
目前我們已經(jīng)能夠看到一些室內(nèi)定位技術(shù)的應(yīng)用介紹了。據(jù)我所知的有谷歌、諾基亞、博通、IndoorAtals、Qubulus、杜克大學(xué)這幾個方案。下面筆者就把它們整理一下,歡迎大家在此基礎(chǔ)上進(jìn)行指正、補(bǔ)充。
談?wù)勈覂?nèi)定位
谷歌方案
谷歌手機(jī)地圖6.0版的時候已經(jīng)在一些地區(qū)加入了室內(nèi)導(dǎo)航功能,此方案主要依靠GPS(室內(nèi)一般也能搜索到2~3顆衛(wèi)星)、wifi信號、手機(jī)基站以及根據(jù)一些“盲點(diǎn)”(室內(nèi)無GPS、wifi或基站信號的地方)的具體位置完成室內(nèi)的定位。目前此方案的精度還不是很滿意,所以谷歌后來又發(fā)布了一個叫“Google Maps Floor Plan Marker”的手機(jī)應(yīng)用,號召用戶按照一定的步驟來提高室內(nèi)導(dǎo)航的精度。
谷歌一直在努力解決兩個問題:獲取更多的建筑平面圖;提高室內(nèi)導(dǎo)航的精度。建筑平面圖是室內(nèi)導(dǎo)航的基礎(chǔ),就如同GPS車用導(dǎo)航需要電子導(dǎo)航地圖一樣。谷歌目前想通過“眾包”的方式解決數(shù)據(jù)源的問題,就是鼓勵用戶上傳建筑平面圖。另外,用戶在使用谷歌的室內(nèi)導(dǎo)航時,谷歌會收集一些GPS、wifi、基站等信息,通過服務(wù)器進(jìn)行處理分析之后為用戶提供更準(zhǔn)確的定位服務(wù)。
諾基亞方案
諾基亞采用的是HAIP技術(shù),具體是什么筆者也沒能查到更多的資料,不過諾基亞正在努力使它成為藍(lán)牙協(xié)議的一部分,這樣只要你的設(shè)備帶有藍(lán)牙模塊,就能夠使用這種技術(shù)進(jìn)行定位。當(dāng)然,僅有一個藍(lán)牙模塊還不能完成定位,還需要在室內(nèi)安裝一種定位發(fā)射臺,通過這兩者之間的通信完成定位。這種發(fā)射臺可以覆蓋100m×100m的范圍,定位精度在30cm~100cm,據(jù)說這種發(fā)射臺還有成本低、功耗低等特點(diǎn),一臺或多臺都能完成定位。
博通方案
博通公司研制了一種用于室內(nèi)定位的新芯片(BCM4752),具備三維定位功能(即你所在位置的高度也算出來)。這種芯片可以通過wifi、藍(lán)牙或NFC等技術(shù)來提供室內(nèi)定位系統(tǒng)支持。更強(qiáng)大的是,該芯片可以結(jié)合其它傳感器,例如手機(jī)里的陀螺儀、加速度傳感器、方位傳感器等,將你位置的變化實(shí)時計算出來,甚至做到?jīng)]有死角。博通公司的如意算盤是將這種芯片內(nèi)置到智能手機(jī)里。
IndoorAtlas方案
IndoorAtlas是一家專注于室內(nèi)導(dǎo)航解決方案的公司,剛成立不久。IndoorAtlas的方案基于地球磁場,依據(jù)是每一個具體位置的磁場信息都不一樣。不過使用這種技術(shù)進(jìn)行導(dǎo)航比較麻煩,首先用戶需要上傳建筑平面圖,然后還需要你拿著移動設(shè)備繞室內(nèi)一圈,記錄下各個位置的地磁信號特征,這些信息需要上傳到IndoorAtlas的服務(wù)器。最后,你需要使用IndoorAtlas提供的工具包開發(fā)一個應(yīng)用才能使用定位功能(IndoorAtlas的開發(fā)工具包可以在線申請,不過筆者申請了兩次都沒結(jié)果)。
Qubulus方案
跟IndoorAtlas不同的是,Qubulus公司根據(jù)無線電信號(Radio Signature)來定位。每一個位置的無線電信號數(shù)量、頻度、強(qiáng)度等也是不同的,Qubulus根據(jù)這些差異計算出你的具體位置。使用Qubulus的方案,你同樣需要收集室內(nèi)的無線電信號。Qubulus也提供了開發(fā)工具包,很容易申請下來。開發(fā)工具包里有一個例子,可以使用Eclipse直接編譯通過。
杜克大學(xué)方案
杜克大學(xué)則借助現(xiàn)實(shí)生活中路標(biāo)(landmarks)的思想,正在開發(fā)一個叫做UnLoc的應(yīng)用。此應(yīng)用通過感知wifi、3G信號死角,以及一些運(yùn)動特征,如電梯、樓梯等,并根據(jù)這些位置已知的路標(biāo)來計算你的位置。當(dāng)你移動的時候,就根據(jù)其他感應(yīng)器( 陀螺儀、加速度傳感器、方位傳感器等)來跟蹤你的位置。這一過程精度會逐漸降低,但當(dāng)你到達(dá)下一個路標(biāo)時,位置就會被校準(zhǔn)
名稱欄目:android定位功能實(shí)現(xiàn),手機(jī)定位實(shí)現(xiàn)
URL分享:http://chinadenli.net/article22/dsgpgjc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站收錄、移動網(wǎng)站建設(shè)、小程序開發(fā)、全網(wǎng)營銷推廣、虛擬主機(jī)、ChatGPT
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)