Android GPS定位詳解及實(shí)例代碼
GPS定位是智能手機(jī)上一個(gè)比較有意思的功能,LBS等服務(wù)都有效的利用了GPS定位功能。本文就跟大家分享下Android開(kāi)發(fā)中的GPS定位知識(shí)。
一、Android基礎(chǔ)知識(shí)準(zhǔn)備
1、Activity類(lèi)
每一種移動(dòng)開(kāi)發(fā)環(huán)境都有自己的基類(lèi)。如J2ME應(yīng)用程序的基類(lèi)是midlets,BREW的基類(lèi)是applets,而Android程序的基類(lèi)是Activity。這個(gè)activity為我們提供了對(duì)移動(dòng)操作系統(tǒng)的基本功能和事件的訪(fǎng)問(wèn)。這個(gè)類(lèi)包含了基本的構(gòu)造方法,鍵盤(pán)處理,掛起來(lái)恢復(fù)功能,以及其他底層的手持設(shè)備的訪(fǎng)問(wèn)。實(shí)質(zhì)上,我們的應(yīng)用程序?qū)⑹且粋€(gè)Activity類(lèi)的擴(kuò)展。在本文中讀者將會(huì)通過(guò)例子學(xué)習(xí)到如何使用Activity類(lèi)來(lái)編寫(xiě)Android程序。下面是一個(gè)簡(jiǎn)單的繼承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)用程序第一次開(kāi)始時(shí)調(diào)用。Bundle對(duì)象包含了任何用于建立參數(shù)或環(huán)境數(shù)據(jù)所需要的基本信息。Activity 可以是全屏的,或是懸浮的。它們可以是嵌套的,但是每一部分基本是獨(dú)立的。那么,也許有人會(huì)問(wèn),setContentView是做什么的呢?
2、View類(lèi)
View類(lèi)是Android的一個(gè)超類(lèi),這個(gè)類(lèi)幾乎包含了所有的屏幕類(lèi)型。但它們之間有一些不同。每一個(gè)view都有一個(gè)用于繪畫(huà)的畫(huà)布。這個(gè)畫(huà)布 可以用來(lái)進(jìn)行任意擴(kuò)展。本文為了方便起見(jiàn),只涉及到了兩個(gè)主要的View類(lèi)型:定義View和Android的XML內(nèi)容View。在上面的代碼中,使用 的是“Hello World” XML View,它是以非常自然的方式開(kāi)始的。
如果我們查看一下新的Android工程,就會(huì)發(fā)現(xiàn)一個(gè)叫main.xml的文件。在這個(gè)文件中,通過(guò)一個(gè)簡(jiǎn)單的XML文件,描述了一個(gè)屏幕的布局。這個(gè)簡(jiǎn)單的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)容的功能看起來(lái)非常明顯。這個(gè)特殊文件定義了一個(gè)相關(guān)的布局,這就意味著通過(guò)一個(gè)元素到另一個(gè)元素的關(guān)系或是它們父元素的關(guān)系來(lái)描述。對(duì)于視圖來(lái)說(shuō),有一些用于布局的方法,但是在本文中只關(guān)注于上述的xml文件。
RealtiveLayout中包含了一個(gè)填充整個(gè)屏幕的文本框(也就是我們的LocateMe activity)。這個(gè)LocateMe activity在默認(rèn)情況下是全屏的,因此,文本框?qū)⒗^承這個(gè)屬性,并且文本框?qū)⒃谄聊坏淖笊辖秋@示。另外,必須為這個(gè)XML文件設(shè)置一個(gè)引用數(shù),以便 Android可以在源代碼中找到它。在默認(rèn)情況下,這些引用數(shù)被保存在R.java中,代碼如下:
Java代碼
public final class R
{
public static final class layout
{
public static final int main=0x7f030001;
}
}
視圖也可以被嵌套,但和J2ME不同,我們可以將定制的視圖和Android團(tuán)隊(duì)發(fā)布的Widgets一起使用。在J2ME中,開(kāi)發(fā)人員被迫選擇 GameCanvas和J2ME應(yīng)用程序畫(huà)布。這就意味著如果我們想要一個(gè)定制的效果,就必須在GameCanvas上重新設(shè)計(jì)我們所有的widget。 Android還不僅僅是這些,視圖類(lèi)型也可以混合使用。Android還帶了一個(gè)widget庫(kù),這個(gè)類(lèi)庫(kù)包括了滾動(dòng)條,文本實(shí)體,進(jìn)度條以及其他很多 控件。這些標(biāo)準(zhǔn)的widget可以被重載或被按著我們的習(xí)慣定制?,F(xiàn)在讓我們來(lái)進(jìn)入我們的例子。
二、Android GPS定位實(shí)例
這個(gè)演示應(yīng)用程序?qū)⒀菔玖擞脩?hù)的當(dāng)前的經(jīng)度和緯度(在文本框中顯示)。onCreate構(gòu)造方法將和上面的例子基本相同,除了在其中加入了鍵盤(pán)處理,現(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;
}
下面讓我們來(lái)解釋一下這段代碼,首先,這段代碼檢查了當(dāng)前被按下的鍵,但還沒(méi)有開(kāi)始處理。而是在getLocation方法中處理這一切的。然后,將裝載flag標(biāo)志以及調(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);
}
到此為止,程序開(kāi)始變得更有趣了。但是不幸的是,Google關(guān)于之方面的文檔還是比較少了。在程序的變量聲明之后,我們需要演示一些裝載信息。R.layout.loading符合了另一個(gè)簡(jiǎn)單的XML布局視圖。通過(guò)簡(jiǎn)單地調(diào)用setContentView方法可以使用轉(zhuǎn)載信息重繪屏幕。
讀者要注意的是:在編譯時(shí),Android會(huì)預(yù)先將所有的XML布局?jǐn)?shù)據(jù)包裝起來(lái)。如果我們想在編譯后變化布局屬性,按著規(guī)定,我們必須在源程序中做這些事。
獲得LocationManager的唯一方法是通過(guò)getSystemService()方法的調(diào)用。通過(guò)使用LocationManager,我們可以獲得一個(gè)位置提供者的列表。在一個(gè)真實(shí)的手持設(shè)備中,這個(gè)列表包含了一些GPS服務(wù)。實(shí)際上,我們希望選擇更強(qiáng)大,更精確,最后不帶有其他附加服務(wù)的GPS?,F(xiàn)在,在模擬器中提供了一個(gè)用于測(cè)試的GPS,這個(gè)GPS來(lái)自San Francisco。定制的GPS文件可以可以被上傳,并進(jìn)行測(cè)試。如果我們要測(cè)試更復(fù)雜的應(yīng)用,來(lái)自San Francisco的GPS可能并不適合。
目前我們可以使用位置管理器和位置提供者進(jìn)行g(shù)etCurrentLocation的調(diào)用。這個(gè)方法返回本機(jī)的當(dāng)前位置的一個(gè)快照,這個(gè)快照將以 Location對(duì)象形式提供。在手持設(shè)備中,我們可以獲得當(dāng)前位置的經(jīng)度和緯度。現(xiàn)在,使用這個(gè)虛擬的手持設(shè)備,我們可以獲得這個(gè)例子程序的最終結(jié)果: 建立了顯示一個(gè)定制的視圖。
三、使用定制視圖
在最簡(jiǎn)單的窗體中,一個(gè)Android中的視圖僅僅需要重載一個(gè)onDraw方法。定制視圖可以是復(fù)雜的3D實(shí)現(xiàn)或是非常簡(jiǎn)單的文本形式。下面的CreateView方法列出了上面看到的內(nèi)容。
Java代碼
public voidCreateView(){
customView = newCustomView(this);
}
這個(gè)方法簡(jiǎn)單地調(diào)用了CustomView對(duì)象的構(gòu)造方法。CustomView類(lèi)的定義如下:
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);
}
}
這個(gè)定制的Android視圖獲得了經(jīng)度和違度的測(cè)試數(shù)據(jù),并將這些數(shù)據(jù)顯示在屏幕上。這要求一個(gè)指向LocateMe的指針,Activity類(lèi)是整個(gè)應(yīng)用程序的核心。它的兩個(gè)方法是構(gòu)造方法和onDraw方法。這個(gè)構(gòu)造方法調(diào)用了超類(lèi)的構(gòu)造方法以及引起了Activity指針的中斷。 onDraw方法將建立一個(gè)新的Paint對(duì)象(這個(gè)對(duì)象封裝了顏色、透明度以及其他的主題信息),這個(gè)對(duì)象將會(huì)訪(fǎng)問(wèn)顏色主題。在本程序中,安裝了用于顯 示的字符串,并使用畫(huà)布指針將它們畫(huà)到屏幕上。這個(gè)和我們了解的J2ME游戲的畫(huà)布看起來(lái)非常類(lèi)似。
感謝閱讀本文,希望能幫助到有需要的朋友,謝謝大家對(duì)本站的支持!
- Android打開(kāi)GPS導(dǎo)航并獲取位置信息返回null解決方案
- Android GPS定位測(cè)試(附效果圖和示例)
- Android實(shí)現(xiàn)GPS定位代碼實(shí)例
- android通過(guò)gps獲取定位的位置數(shù)據(jù)和gps經(jīng)緯度
- android手機(jī)獲取gps和基站的經(jīng)緯度地址實(shí)現(xiàn)代碼
- Android中GPS定位的用法實(shí)例
- Android中實(shí)現(xiàn)GPS定位的簡(jiǎn)單例子
- Android使用GPS獲取用戶(hù)地理位置并監(jiān)聽(tīng)位置變化的方法
- Android編程獲取GPS數(shù)據(jù)的方法詳解
- python獲取android設(shè)備的GPS信息腳本分享
- Android 定位系統(tǒng)(GPS)開(kāi)發(fā)詳解
- Android編程實(shí)現(xiàn)GPS位置獲取的方法
相關(guān)文章
android?studio實(shí)現(xiàn)簡(jiǎn)單的計(jì)算器小功能
這篇文章主要為大家詳細(xì)介紹了android?studio實(shí)現(xiàn)簡(jiǎn)單的計(jì)算器小功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05
android使用include調(diào)用內(nèi)部組件的方法
這篇文章主要介紹了android使用include調(diào)用內(nèi)部組件的方法,涉及Android組件調(diào)用的相關(guān)技巧,需要的朋友可以參考下2015-05-05
Android 虛擬按鍵適配動(dòng)態(tài)調(diào)整布局的方法
今天小編就為大家分享一篇Android 虛擬按鍵適配動(dòng)態(tài)調(diào)整布局的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-07-07
Android?懸浮窗開(kāi)發(fā)示例((動(dòng)態(tài)權(quán)限請(qǐng)求?|?前臺(tái)服務(wù)和通知?|?懸浮窗創(chuàng)建?)
本文介紹了Android懸浮窗的實(shí)現(xiàn)效果,包括動(dòng)態(tài)權(quán)限請(qǐng)求、前臺(tái)服務(wù)和通知的使用,懸浮窗權(quán)限需要?jiǎng)討B(tài)申請(qǐng)并引導(dǎo)用戶(hù)手動(dòng)開(kāi)啟,前臺(tái)服務(wù)用于保證懸浮窗的持續(xù)存活,支持Android不同版本的兼容性,文章還提供了啟動(dòng)前臺(tái)服務(wù)、創(chuàng)建通知和懸浮窗的代碼示例,感興趣的朋友一起看看吧2025-02-02
解決RecyclerView無(wú)法onItemClick問(wèn)題的兩種方法
這篇文章主要介紹了解決RecyclerView無(wú)法onItemClick問(wèn)題的相關(guān)知識(shí),非常不錯(cuò),具有參考借鑒價(jià)值,感興趣的朋友一起看下吧2016-07-07
Android自定義Gallery控件實(shí)現(xiàn)3D圖片瀏覽器
這篇文章主要介紹了Android自定義Gallery控件實(shí)現(xiàn)3D圖片瀏覽器,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-04-04
移動(dòng)端開(kāi)發(fā)之Jetpack?Hilt技術(shù)實(shí)現(xiàn)解耦
Hilt的出現(xiàn)解決前兩點(diǎn)問(wèn)題,因?yàn)镠ilt是Dagger針對(duì)Android平臺(tái)的場(chǎng)景化框架,比如Dagger需要我們手動(dòng)聲明注入的地方,而Android聲明的地方不都在onCreate()嗎,所以Hilt就幫我們做了,除此之外還做了很多事情2023-02-02

