androidgps數據格式
Ⅰ 如何利用Android編程實現GPS定位
您好,很高興為您解答。
一、准備工作
需要如下三種軟體:
1. Eclipse
2. Android SDK
3. 開發Android程序的Eclipse 插件
為了開始我們的工作,首先要安裝Eclipse,然後從Google的網站獲得Android SDK,並且安裝Eclipse插件。
二、Activity類
每一種移動開發環境都有自己的基類。如J2ME應用程序的基類是midlets,BREW的基類是applets,而Android程序的基類是 Activity。這個activity為我們提供了對移動操作系統的基本功能和事件的訪問。這個類包含了基本的構造方法,鍵盤處理,掛起來恢復功能,以 及其他底層的手持設備的訪問。實質上,我們的應用程序將是一個Activity類的擴展。在本文中讀者將會通過例子學習到如何使用Activity類來編 寫Android程序。下面是一個簡單的繼承Activity的例子。
java">{
publicvoidonCreate(Bundleparams){
super.onCreate(params);
setContentView(R.layout.main);
}
publicbooleanonKeyDown(intkeyCode,KeyEventevent){
returntrue;
}
}
三 View類
View類是Android的一個超類,這個類幾乎包含了所有的屏幕類型。但它們之間有一些不同。每一個view都有一個用於繪畫的畫布。這個畫布可以用 來進行任意擴展。本文為了方便起見,只涉及到了兩個主要的View類型:定義View和Android的XML內容View。在上面的代碼中,使用的是 「Hello World」 XML View,它是以非常自然的方式開始的。
如果我們查看一下新的Android工程,就會發現一個叫main.xml的文件。在這個文件中,通過一個簡單的XML文件,描述了一個屏幕的布局。這個 簡單的xml文件的內容如下:
<?xmlversion="1.0"encoding="utf-8"?>
<RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/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=""
/>
</RelativeLayout>
上面的內容的功能看起來非常明顯。這個特殊文件定義了一個相關的布局,這就意味著通過一個元素到另一個元素的關系或是它們父元素的關系來描述。對於視圖來 說,有一些用於布局的方法,但是在本文中只關注於上述的xml文件。
RealtiveLayout中包含了一個填充整個屏幕的文本框(也就是我們的LocateMe activity)。這個LocateMe activity在默認情況下是全屏的,因此,文本框將繼承這個屬性,並且文本框將在屏幕的左上角顯示。另外,必須為這個XML文件設置一個引用數,以便 Android可以在源代碼中找到它。在默認情況下,這些引用數被保存在R.java中,代碼如下:
publicfinalclassR{
publicstaticfinalclasslayout{
publicstaticfinalintmain=0x7f030001;
}
}
視圖也可以被嵌套,但和J2ME不同,我們可以將定製的視圖和Android團隊發布的Widgets一起使用。在J2ME中,開發人員被迫選擇 GameCanvas和J2ME應用程序畫布。這就意味著如果我們想要一個定製的效果,就必須在GameCanvas上重新設計我們所有的widget。 Android還不僅僅是這些,視圖類型也可以混合使用。Android還帶了一個 widget庫,這個類庫包括了滾動條,文本實體,進度條以及其他很多控制項。這些標準的widget可以被重載或被按著我們的習慣定製。現在讓我們來進入 我們的例子。
四、Android實例
這個演示應用程序將演示了用戶的當前的經度和緯度(在文本框中顯示)。onCreate構造方法將和上面的例子基本相同,除了在其中加入了鍵盤處理,現在 讓我們看一下onKeyDown的代碼。
publicbooleanonKeyDown(intkeyCode,KeyEventevent){
if(keyCode!=KeyEvent.KEYCODE_DPAD_CENTER||m_bLoading)
{
returntrue;
}
m_bLoading=true;
getLocation();
returntrue;
}
下面讓我們來解釋一下這段代碼,首先,這段代碼檢查了當前被按下的鍵,但還沒有開始處理。而是在getLocation方法中處理這一切的。然後,將裝載 flag標志以及調用getLocation方法,下面是getLocation方法的代碼。
privatevoidgetLocation(){
Locationloc;
LocationManagerlocMan;
LocationProviderlocPro;
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關於之方面的文檔還是比較少了。在程序的變數聲明之後,我們需要演示一些裝載信息。 R.layout.loading符合了另一個簡單的XML布局視圖。通過簡單地調用setContentView方法可以使用轉載信息重繪屏幕。
讀者要注意的是:在編譯時,Android會預先將所有的XML布局數據包裝起來。如果我們想在編譯後變化布局屬性,按著規定,我們必須在源程序中做這些 事。
獲得LocationManager的唯一方法是通過getSystemService()方法的調用。通過使用LocationManager, 我們可以獲得一個位置提供者的列表。在一個真實的手持設備中,這個列表包含了一些GPS服務。實際上,我們希望選擇更強大,更精確,最後不帶有其他附加服 務的GPS。現在,在模擬器中提供了一個用於測試的GPS,這個GPS來自San Francisco。定製的GPS文件可以可以被上傳,並進行測試。如果我們要測試更復雜的應用,來自San Francisco的GPS可能並不適合。
目前我們可以使用位置管理器和位置提供者進行getCurrentLocation的調用。這個方法返回本機的當前位置的一個快照,這個快照將以 Location對象形式提供。在手持設備中,我們可以獲得當前位置的經度和緯度。現在,使用這個虛擬的手持設備,我們可以獲得這個例子程序的最終結果: 建立了顯示一個定製的視圖。
五、使用定製視圖
在最簡單的窗體中,一個Android中的視圖僅僅需要重載一個onDraw方法。定製視圖可以是復雜的3D實現或是非常簡單的文本形式。下面的 CreateView方法列出了上面看到的內容。
publicvoidCreateView(){
customView=newCustomView(this);
}
這個方法簡單地調用了CustomView對象的構造方法。CustomView類的定義如下:
{
LocateMeoverlord;
publicCustomView(LocateMepCtx){
super(pCtx);
overlord=pCtx;
}
publicvoidonDraw(Canvascvs){
Paintp=newPaint();
StringsLat="Latitude:"+overlord.getLat();
StringsLon="Longitude:"+overlord.getLon();
cvs.drawText(sLat,32,32,p);
cvs.drawText(sLon,32,44,p);
}
}
這個定製的Android視圖獲得了經度和違度的測試數據,並將這些數據顯示在屏幕上。這要求一個指向LocateMe的指針,Activity類是整 個應用程序的核心。它的兩個方法是構造方法和onDraw方法。這個構造方法調用了超類的構造方法以及引起了Activity指針的中斷。onDraw方 法將建立一個新的Paint對象(這個對象封裝了顏色、透明度以及其他的主題信息),這個對象將會訪問顏色主題。在本程序中,安裝了用於顯示的字元串,並 使用畫布指針將它們畫到屏幕上。這個和我們了解的J2ME游戲的畫布看起來非常類似。
六、Android展望
從純粹的開發觀點看,Android是一個非常強大的SDK。它使用基於XML的布局和定製視圖聯合了起來。並可以使用滾動條、地圖以及其他的組件。所以 的這一切都可以被重載,或由開發人員來定製。但它所提供的文檔非常粗糙。在文檔中並沒有象SMS等技術,但是從整體上來看Android SDK,還是非常有希望的。也非常符合Google承諾的「First Look」SDK。現在我們要做的就是等待Google發布第一個基於Android的手機,並使用它。
如若滿意,請點擊右側【採納答案】,如若還有問題,請點擊【追問】
希望我的回答對您有所幫助,望採納!
~O(∩_∩)O~
Ⅱ mqtt 怎麼實現android以後台service的方式獲取gps數據,並定時發送到伺服器
1 從Service繼承一個類。
2 創建startService()方法。
3 創建endService()方法 重載onCreate方法和onDestroy方法,並在這兩個方法裡面來調用startService以及endService。
4 在startService中,通過getSystemService方法獲取Context.LOCATION_SERVICE。
5 基於LocationListener實現一個新類。默認將重載四個方法onLocationChanged、onProviderDisabled、onProviderEnabled、onStatusChanged。對於onLocationChanged方法是我們更新最新的GPS數據的方法。一般我們的操作都只需要在這里進行處理。
6 調用LocationManager的requestLocationUpdates方法,來定期觸發獲取GPS數據即可。在onLocationChanged函數裡面可以實現我們對得到的經緯度的最終操作。
7 最後在我們的Activity裡面通過按鈕來啟動Service,停止Service。
示意代碼如下:
package com.offbye.gpsservice;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Binder;
import android.os.IBinder;
import android.util.Log;
public class GPSService extends Service {
// 2000ms
private static final long minTime = 2000;
// 最小變更距離10m
private static final float minDistance = 10;
String tag = this.toString();
private LocationManager locationManager;
private LocationListener locationListener;
private final IBinder mBinder = new GPSServiceBinder();
public void startService() {
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
locationListener = new GPSServiceListener();
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, minTime, minDistance,
locationListener);
}
public void endService() {
if (locationManager != null && locationListener != null) {
locationManager.removeUpdates(locationListener);
}
}
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return mBinder;
}
Ⅲ android如何獲取地理位置
三種方式進行定位,獲取用戶位置,分別是基於基站定位, 網路定位,GPS定位。
1.基站定位(passive):這是基於網路基站進行定位的,定位的精確度在幾十米到幾千米不等,在城市中基站覆蓋率比較高,推薦使用基站定位,如果是在郊區,基站相距較遠,基站的覆蓋沒有城裡好,定位的誤差比較大。如果在郊區不推薦使用基站定位。
2.網路定位:wifi定位,網路定位
3.GPS定位:與衛星進行通信。手機中嵌入了GPS模塊(精簡版的A-GPS),通過A-GPS搜索衛星, 獲取經緯度。使用GPS的弊端是:必須站在空曠的地方,頭頂對著天空,如果雲層厚了,也會受到一定的影響。精確度:10-50米
擴展知識:
使用Android是定位必備的許可權:
< uses-permission android:name= " android.permission.ACCESS_FINE_LOCATION " /> //精確定位
<uses-permission android:name= "android.permission.ACCESS_MOCK_LOCATION" /> //模擬器
<uses-permission android:name= "android.permission.ACCESS_COARSE_LOCATION" /> //粗糙定位
//獲取定位管理對象
LocationManager lm=(LocationManager)getSystemService(LOCATION_SERVICE);
String[] names=lm.getAllProviders();//獲取所有的位置提供者,一般三種
Criteria criteria=new Criteria();//查詢條件,如果設置了海拔,則定位方式只能是GPS;
criteria.setCostAllowed(true);//是否產生開銷,比如流量費
String provider=lm.getBaseProvider(criteria,true)//獲取最好的位置提供者,第二個參數為true,表示只獲取那些被打開的位置提供者
lm.requestLocationUpdates(provier,0,0,new LocationListener(){});//獲取位置。第二個參數表示每隔多少時間返回一次數據,第三個參數表示被定位的物體移動每次多少米返回一次數據。
private class MyLocationListener implements LocationListener {
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
@Override
public void onLocationChanged(Location location) {
System. out.println( "服務中位置監聽發送了變化了" );
float accuracy = location.getAccuracy(); // 精確度
double altitude = location.getAltitude(); // 海拔
double latitude = location.getLatitude(); // 緯度
double longitude = location.getLongitude(); // 經度
String locationInfo = "jing:" + longitude + ",wei:" + latitude + ",haiba:" + altitude + ",jingque:" + accuracy;
Editor edit = sp.edit();
edit.putString( "location", locationInfo);
edit.commit();
}
} public void onProviderDisabled(String provider) {
}
Ⅳ 谷歌Android系統的GPS是怎樣運行的
現在讓我們理解每一樣東西
GPS晶元
直接與GPS衛星通訊的射頻接收機。
GPS驅動
GPS驅動系統軟體,使用低階API和GPS晶元通訊。在系統層上它可能包含一個或多個載入在/System/Lib/hw/或/Vendor/Lib/hw/目錄的文件,文件名稱通常前綴為GPS而後綴為So(例如,gps.default.so、gps.aries.so等等)主要取決Android版本與智能平台的差異有所不同。
GL引擎實際上這是整個系統的核心,在系統層上它由載入在/system/bin目錄名類似於glgps或gpsd的文件組成(平台特定)。
GL引擎使用配置參數運行,由.xml 和.conf 文件構成(例如,glconfig.xml、gps.xml、Jupiter.xml、gpsconfig.xml、gps.conf、secgps.conf等等)。實際位置和文件的名稱也取決於Android版本與平台,但是,他們大多是在/system/etc、/system/etc/gps、/vendor/etc/、/data/gps等等。取決於配置和平台,它需要源於發射塔的初始位置信息, 然後它讀取NVRAM(Non-volatile memory,非易失性存儲器),NVRAM信息主要在/有著.sto擴展的文件(例如,gldata.sto)與附加數據文件(如lto.dat、xtra.bin、epo.dat等等)的data/gps目錄。
GL引擎使用所有的這些信息指示並協助GPS驅動,大多GL引擎都可以探測到多個GPS衛星而為了GPS驅動的規劃,但對於鎖定,它還需要一些額外的信息(定時、應用周期管理等),它可以從GPS衛星下載(獨立模式:速度非常緩慢,比特/秒)或利用互聯網來訪問SUPL(Secure User Plane Location,安全用戶層面定位)/NTP(Network Time Protocol,網路定時協議)伺服器(基於主存儲器的協助,速度快,兆位/秒)
當所有的這些都激活後,它將保存所有數據在NVRAM中,以供將來調用。
Android構架
它包括像使用GL引擎提供服務到用戶應用程序的位置管理器等Android框架。
用戶應用程序
位置服務應用,像Google Maps(谷歌地圖)、Sygic(導航系統)、Navigon(路航)、TomTom(通騰)等等。
在心裡記住以上所有的內容了嗎?現在讓我們看看市場中GPS Faster Fix Solutions(更快的解決方案)是如何做的。
更快的解決方案,像GPS狀態、GPS工具組、GPS測試、GPS偵測等等,主要為處理兩件事:
下載XTRA數據(lto.dat、xtra.bin、epo.dat、gldata.sto等)
修改GPS.conf(更改這個系統級的配置文件,你當然要取得你的Android設備的Root許可權)
盡管如此,它並不完全是這樣的。
設備使用谷歌作為安全用戶層面定位伺服器,但大多數設備由於無效或過期的證書無法使用它。在這樣的情況中,即當谷歌伺服器拒絕協助請求時,用戶應該使用SUPL.NOKIA.COM:7275,這雖然緩慢,但比什麼都沒有更好。
如果GL引擎或GPS驅動有問題,則可能需要重新寫入它,但首先得確保物理硬體GPS晶元沒有問題。
對於其他的配置參數,用戶們常可以修改xml配置文件,比如,至少你可以獲得調試日誌來了解錯誤的發展方向,你可以使用下面的參數
cLogEnabled="true" acLogDirectory="/sdcard/gps" and LogPriMask, LogFacMask and also DEBUG_LEVEL(gps.conf)
當然,無論怎樣,你首先得備份原始的文件。
希望每位用戶使用這個指南後都能輕松地提高他們的GPS性能。
Ⅳ android編程怎麼把GPS坐標轉換為百度地圖坐標
/**
* 標準的GPS經緯度坐標直接在地圖上繪制會有偏移,這是測繪局和地圖商設置的加密,要轉換成網路地圖坐標
*
* @return 網路地圖坐標
*/
publicGeoPoint gpsToBai(String data) {//data格式 nmea標准數據 ddmm.mmmmm,ddmm.mmmm 如3030.90909,11449.1234
String[] p = data.split(",");
intlat = (int) (((int) (Float.valueOf(p[0]) /100) + (100* (Float//將ddmm.mmmm格式轉成dd.ddddd
.valueOf(p[0]) /100.0- (int) (Float.valueOf(p[0]) /100)) /60.0)) * 1E6);
intlon = (int) (((int) (Float.valueOf(p[1]) /100) + (100* (Float
.valueOf(p[1]) /100.0- (int) (Float.valueOf(p[1]) /100)) /60.0)) * 1E6);
GeoPoint pt =newGeoPoint(lat, lon);
returnCoordinateConvert.fromWgs84ToBai(pt);//轉成網路坐標
}