Android編程獲取GPS數(shù)據(jù)的方法詳解
本文實(shí)例講述了Android編程獲取GPS數(shù)據(jù)的方法。分享給大家供大家參考,具體如下:
GPS是Android系統(tǒng)中重要的組成部分,通過它可以衍生出眾多的與位置相關(guān)的應(yīng)用。
Android的GPS有一個專門的管理類,稱為LocationManager,所有的GPS定位服務(wù)都由其對象產(chǎn)生并進(jìn)行控制。
首先需要明確的是,LocationManager類的對象獲取并不是直接創(chuàng)建的,而是由系統(tǒng)提供的,具體來說,通過如下方法,為一個LocationManager對象建立一個對象引用:
至此,我們可以用locationManager這個對象對任意有關(guān)GPS的功能進(jìn)行操作了。下表列出了幾個常用的成員方法:
|
方法及其簽名 |
描述 |
|
List<String> getAllProviders() |
獲取所有與設(shè)備關(guān)聯(lián)的定位模塊的列表 |
|
String getBestProvider(Criteria, boolean) |
獲取設(shè)定的標(biāo)準(zhǔn)(Criteria對象)中最適合的一個設(shè)備 |
|
GpsStatus getGpsStatus(GpsStatus) |
獲取GPS當(dāng)前狀態(tài) |
|
Location getLastKnownLocation(String) |
獲取最近一次的可用地點(diǎn)信息 |
|
boolean isProviderEnabled(String) |
判斷參數(shù)所提及的設(shè)備是否可用 |
GPS還有一個支持API,即Location,它的作用是一個代表位置信息的抽象類,用它可以獲取所有的位置數(shù)據(jù):
|
方法及其簽名 |
描述 |
|
double getAltitude() |
獲取當(dāng)前高度 |
|
float getBearing() |
獲取當(dāng)前方向 |
|
double getLatitude() |
獲取當(dāng)前緯度 |
|
double getLongitude() |
獲取當(dāng)前經(jīng)度 |
|
float getSpeed() |
獲取當(dāng)前速度 |
我們可以用以上的方法開始進(jìn)行定位。
可以將地點(diǎn)信息傳遞給一個Location對象:
我們還可以調(diào)用以下函數(shù),對每次更新的位置信息進(jìn)行我們想要的操作:
其中,第一個參數(shù)是LocationProvider對象,第二個參數(shù)是刷新的時(shí)間差,這里設(shè)定為1秒,第三個參數(shù)是位置差,這里設(shè)定為10米,第四個參數(shù)為一個位置監(jiān)聽器對象,它必須實(shí)現(xiàn)4個方法:
①. public void onLocationChanged(Location location)
②. public void onProviderDisabled(String provider)
③. public void onProviderEnabled(String provider)
④. public void onStatusChanged(String provider, int status, Bundleextras)
可以重寫這些方法來實(shí)現(xiàn)我們的需求。
當(dāng)我們使用模擬器進(jìn)行測試的時(shí)候,由于模擬器無法獲取地理位置,所以必須用Emulator的位置控制器進(jìn)行設(shè)置:

最終的結(jié)果如圖所示:

代碼如下所示:
package org.timm.android;
import android.app.Activity;
import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.widget.EditText;
public class LocationTryActivity extends Activity {
EditText text;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final LocationManager locationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
text = (EditText)findViewById(R.id.textShow);
Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
showLocation(location);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 10, new LocationListener(){
public void onLocationChanged(Location location) {
// TODO Auto-generated method stub
showLocation(location);
}
public void onProviderDisabled(String provider) {
// TODO Auto-generated method stub
showLocation(null);
}
public void onProviderEnabled(String provider) {
// TODO Auto-generated method stub
showLocation(locationManager.getLastKnownLocation(provider));
}
public void onStatusChanged(String provider, int status, Bundle extras) {
// TODO Auto-generated method stub
}
});
}
public void showLocation(Location currentLocation){
if(currentLocation != null){
String s = "";
s += " Current Location: (";
s += currentLocation.getLongitude();
s += ",";
s += currentLocation.getLatitude();
s += ")\n Speed: ";
s += currentLocation.getSpeed();
s += "\n Direction: ";
s += currentLocation.getBearing();
text.setText(s);
}
else{
text.setText("");
}
}
}
最后一點(diǎn)需要說明的是,需要在AndroidManifest.xml中設(shè)置許可:
PS:關(guān)于AndroidManifest.xml詳細(xì)內(nèi)容可參考本站在線工具:
Android Manifest功能與權(quán)限描述大全:
http://tools.jb51.net/table/AndroidManifest
更多關(guān)于Android相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Android控件用法總結(jié)》、《Android視圖View技巧總結(jié)》、《Android操作SQLite數(shù)據(jù)庫技巧總結(jié)》、《Android操作json格式數(shù)據(jù)技巧總結(jié)》、《Android數(shù)據(jù)庫操作技巧總結(jié)》、《Android文件操作技巧匯總》、《Android編程開發(fā)之SD卡操作方法匯總》、《Android開發(fā)入門與進(jìn)階教程》及《Android資源操作技巧匯總》
希望本文所述對大家Android程序設(shè)計(jì)有所幫助。
- Android打開GPS導(dǎo)航并獲取位置信息返回null解決方案
- Android GPS定位測試(附效果圖和示例)
- Android實(shí)現(xiàn)GPS定位代碼實(shí)例
- android通過gps獲取定位的位置數(shù)據(jù)和gps經(jīng)緯度
- Android實(shí)現(xiàn)Service獲取當(dāng)前位置(GPS+基站)的方法
- android手機(jī)獲取gps和基站的經(jīng)緯度地址實(shí)現(xiàn)代碼
- Android中GPS定位的用法實(shí)例
- Android中實(shí)現(xiàn)GPS定位的簡單例子
- Android中GPS坐標(biāo)轉(zhuǎn)換為高德地圖坐標(biāo)詳解
- Android GPS獲取當(dāng)前經(jīng)緯度坐標(biāo)
相關(guān)文章
Android中AOP的應(yīng)用實(shí)踐之過濾重復(fù)點(diǎn)擊
這篇文章主要給大家介紹了關(guān)于Android中AOP的應(yīng)用實(shí)踐之過濾重復(fù)點(diǎn)擊的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對各位Android開發(fā)者們具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-09-09
Android實(shí)現(xiàn)下載m3u8視頻文件問題解決
這篇文章主要介紹了Android實(shí)現(xiàn)下載m3u8視頻文件,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2023-01-01
詳解關(guān)于Android Studio中安裝和gradle的一些坑
本篇文章主要介紹了關(guān)于Android Studio中安裝和gradle的一些坑,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-10-10
Android開發(fā)者常見的UI組件總結(jié)大全
Android開發(fā)中UI組件是構(gòu)建用戶界面的基本元素,下面這篇文章主要給大家介紹了關(guān)于Android開發(fā)者常見的UI組件總結(jié)的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-04-04
Android加載loading對話框的功能及實(shí)例代碼(不退出沉浸式效果)
這篇文章主要介紹了Android加載loading對話框的功能及實(shí)例代碼,不退出沉浸式效果,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-12-12
Android UniversalVideoView實(shí)現(xiàn)視頻播放器
這篇文章主要為大家詳細(xì)介紹了Android UniversalVideoView實(shí)現(xiàn)視頻播放器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-04-04
Android編程動態(tài)按鈕實(shí)現(xiàn)方法
這篇文章主要介紹了Android編程動態(tài)按鈕實(shí)現(xiàn)方法,分享了onTouch方法及xml調(diào)用兩種實(shí)現(xiàn)技巧,需要的朋友可以參考下2016-10-10
AndroidStudio安全管理簽名文件keystroe和簽名密碼(星空武哥)
我們在使用AndroidStudio進(jìn)行release版的apk簽名的時(shí)候,往往都是將簽名文件keystore放在項(xiàng)目中,密碼寫在build.gradle中,keystore和密碼就隨著代碼上傳到了Git倉庫中了,這樣往往很不安全,因?yàn)檫@樣被人獲取2017-09-09

