Android GPS定位詳解及實例代碼
GPS定位是智能手機上一個比較有意思的功能,LBS等服務(wù)都有效的利用了GPS定位功能。本文就跟大家分享下Android開發(fā)中的GPS定位知識。
一、Android基礎(chǔ)知識準備
1、Activity類
每一種移動開發(fā)環(huán)境都有自己的基類。如J2ME應(yīng)用程序的基類是midlets,BREW的基類是applets,而Android程序的基類是Activity。這個activity為我們提供了對移動操作系統(tǒng)的基本功能和事件的訪問。這個類包含了基本的構(gòu)造方法,鍵盤處理,掛起來恢復功能,以及其他底層的手持設(shè)備的訪問。實質(zhì)上,我們的應(yīng)用程序?qū)⑹且粋€Activity類的擴展。在本文中讀者將會通過例子學習到如何使用Activity類來編寫Android程序。下面是一個簡單的繼承Activity的例子。
Java代碼
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; } }
在上面程序中的onCreate方法將在應(yīng)用程序第一次開始時調(diào)用。Bundle對象包含了任何用于建立參數(shù)或環(huán)境數(shù)據(jù)所需要的基本信息。Activity 可以是全屏的,或是懸浮的。它們可以是嵌套的,但是每一部分基本是獨立的。那么,也許有人會問,setContentView是做什么的呢?
2、View類
View類是Android的一個超類,這個類幾乎包含了所有的屏幕類型。但它們之間有一些不同。每一個view都有一個用于繪畫的畫布。這個畫布 可以用來進行任意擴展。本文為了方便起見,只涉及到了兩個主要的View類型:定義View和Android的XML內(nèi)容View。在上面的代碼中,使用 的是“Hello World” XML View,它是以非常自然的方式開始的。
如果我們查看一下新的Android工程,就會發(fā)現(xiàn)一個叫main.xml的文件。在這個文件中,通過一個簡單的XML文件,描述了一個屏幕的布局。這個簡單的xml文件的內(nèi)容如下:
XML/HTML代碼
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:text="Press the center key to locate yourself" /> </RelativeLayout>
上面的內(nèi)容的功能看起來非常明顯。這個特殊文件定義了一個相關(guān)的布局,這就意味著通過一個元素到另一個元素的關(guān)系或是它們父元素的關(guān)系來描述。對于視圖來說,有一些用于布局的方法,但是在本文中只關(guān)注于上述的xml文件。
RealtiveLayout中包含了一個填充整個屏幕的文本框(也就是我們的LocateMe activity)。這個LocateMe activity在默認情況下是全屏的,因此,文本框?qū)⒗^承這個屬性,并且文本框?qū)⒃谄聊坏淖笊辖秋@示。另外,必須為這個XML文件設(shè)置一個引用數(shù),以便 Android可以在源代碼中找到它。在默認情況下,這些引用數(shù)被保存在R.java中,代碼如下:
Java代碼
public final class R { public static final class layout { public static final int main=0x7f030001; } }
視圖也可以被嵌套,但和J2ME不同,我們可以將定制的視圖和Android團隊發(fā)布的Widgets一起使用。在J2ME中,開發(fā)人員被迫選擇 GameCanvas和J2ME應(yīng)用程序畫布。這就意味著如果我們想要一個定制的效果,就必須在GameCanvas上重新設(shè)計我們所有的widget。 Android還不僅僅是這些,視圖類型也可以混合使用。Android還帶了一個widget庫,這個類庫包括了滾動條,文本實體,進度條以及其他很多 控件。這些標準的widget可以被重載或被按著我們的習慣定制?,F(xiàn)在讓我們來進入我們的例子。
二、Android GPS定位實例
這個演示應(yīng)用程序?qū)⒀菔玖擞脩舻漠斍暗慕?jīng)度和緯度(在文本框中顯示)。onCreate構(gòu)造方法將和上面的例子基本相同,除了在其中加入了鍵盤處理,現(xiàn)在讓我們看一下onKeyDown的代碼。
Java代碼
public boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode != KeyEvent.KEYCODE_DPAD_CENTER || m_bLoading) { return true; } m_bLoading = true; getLocation(); return true; }
下面讓我們來解釋一下這段代碼,首先,這段代碼檢查了當前被按下的鍵,但還沒有開始處理。而是在getLocation方法中處理這一切的。然后,將裝載flag標志以及調(diào)用getLocation方法,下面是getLocation方法的代碼。
Java代碼
private void getLocation() { Location loc; LocationManager locMan; LocationProvider locPro; List<LocationProvider> 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會預先將所有的XML布局數(shù)據(jù)包裝起來。如果我們想在編譯后變化布局屬性,按著規(guī)定,我們必須在源程序中做這些事。
獲得LocationManager的唯一方法是通過getSystemService()方法的調(diào)用。通過使用LocationManager,我們可以獲得一個位置提供者的列表。在一個真實的手持設(shè)備中,這個列表包含了一些GPS服務(wù)。實際上,我們希望選擇更強大,更精確,最后不帶有其他附加服務(wù)的GPS。現(xiàn)在,在模擬器中提供了一個用于測試的GPS,這個GPS來自San Francisco。定制的GPS文件可以可以被上傳,并進行測試。如果我們要測試更復雜的應(yīng)用,來自San Francisco的GPS可能并不適合。
目前我們可以使用位置管理器和位置提供者進行g(shù)etCurrentLocation的調(diào)用。這個方法返回本機的當前位置的一個快照,這個快照將以 Location對象形式提供。在手持設(shè)備中,我們可以獲得當前位置的經(jīng)度和緯度?,F(xiàn)在,使用這個虛擬的手持設(shè)備,我們可以獲得這個例子程序的最終結(jié)果: 建立了顯示一個定制的視圖。
三、使用定制視圖
在最簡單的窗體中,一個Android中的視圖僅僅需要重載一個onDraw方法。定制視圖可以是復雜的3D實現(xiàn)或是非常簡單的文本形式。下面的CreateView方法列出了上面看到的內(nèi)容。
Java代碼
public voidCreateView(){ customView = newCustomView(this); }
這個方法簡單地調(diào)用了CustomView對象的構(gòu)造方法。CustomView類的定義如下:
Java代碼
public class CustomView extendsView{ LocateMe overlord; publicCustomView(LocateMe pCtx){ super(pCtx); overlord = pCtx; } public voidonDraw(Canvas cvs){ Paint p = newPaint(); 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打開GPS導航并獲取位置信息返回null解決方案
- Android GPS定位測試(附效果圖和示例)
- Android實現(xiàn)GPS定位代碼實例
- android通過gps獲取定位的位置數(shù)據(jù)和gps經(jīng)緯度
- android手機獲取gps和基站的經(jīng)緯度地址實現(xiàn)代碼
- Android中GPS定位的用法實例
- Android中實現(xiàn)GPS定位的簡單例子
- Android使用GPS獲取用戶地理位置并監(jiān)聽位置變化的方法
- Android編程獲取GPS數(shù)據(jù)的方法詳解
- python獲取android設(shè)備的GPS信息腳本分享
- Android 定位系統(tǒng)(GPS)開發(fā)詳解
- Android編程實現(xiàn)GPS位置獲取的方法
相關(guān)文章
Android 使用Glide加載網(wǎng)絡(luò)圖片等比例縮放的實現(xiàn)方法
這篇文章主要介紹了Android 使用Glide加載網(wǎng)絡(luò)圖片等比例縮放的實現(xiàn)方法,需要的朋友可以參考下2018-08-08Android開發(fā)環(huán)境搭建圖文教程 親測有效!
這篇文章主要為大家詳細介紹了Android開發(fā)環(huán)境搭建圖文教程,親自測試有效的搭建方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-03-03Android SpannableString設(shè)置超鏈接、顏色、字體等屬性
這篇文章主要介紹了Android SpannableString設(shè)置超鏈接、顏色、字體等屬性的相關(guān)資料,需要的朋友可以參考下2017-01-01Android Data Binding 在 library module 中遇到錯誤及解決辦法
這篇文章主要介紹了Android Data Binding 在 library module 中遇到錯誤及解決辦法的相關(guān)資料,需要的朋友可以參考下2017-03-03Android 日常開發(fā)總結(jié)的60條技術(shù)經(jīng)驗
這篇文章主要介紹了Android日常開發(fā)總結(jié)的技術(shù)經(jīng)驗60條,需要的朋友可以參考下2016-03-03Android實例代碼理解設(shè)計模式SOLID六大原則
程序設(shè)計領(lǐng)域, SOLID (單一功能、開閉原則、里氏替換、接口隔離以及依賴反轉(zhuǎn))是由羅伯特·C·馬丁在21世紀早期 引入的記憶術(shù)首字母縮略字,指代了面向?qū)ο缶幊毯兔嫦驅(qū)ο笤O(shè)計的基本原則2021-10-10Android中用Builder模式自定義Dialog的方法
在任何軟件操作系統(tǒng)中,Dialog即對話框都是一種重要的交互模式與信息載體,而Android系統(tǒng)本身的Dialog擁有固定的樣式,并且在5.0后采用Material Design設(shè)計風格的Dialog美觀大氣。這篇文章將詳細介紹Android中用Builder模式自定義Dialog的方法,有需要的可以參考借鑒。2016-10-10Android中使用ViewStub實現(xiàn)布局優(yōu)化
ViewStub是Android布局優(yōu)化中一個很不錯的標簽/控件,直接繼承自View。雖然Android開發(fā)人員基本上都聽說過,但是真正用的可能不多。今天我們就來詳細探討下ViewStub的使用2016-09-09