basic4android 開發教程翻譯(九)使用GPS


GPS在很多Android設備上扮演很重要的角色.
幸運的是可以很方便的使其工作起來.
在這個教程里面我們將完成一個程序,它可以顯示當前位置並顯示衛星狀態.



GPS功能被封裝在GPS庫里面.
因此我們首先要把這個庫加入到引用里面:


與其相關的有種類型.最主要的是GPS.
GPS管理連接和事件. 第二個是Location. Location是一個結構,它保存着經度和緯度坐標的修正值,還有其它信息,例如方向, 高度等等.
有時出現得不到所有的信息(例如,信號比較弱).

Location也包含其他功能,例如計算與另外一個Location的距離和方位,也包含轉換坐標字符串 格式的方法.
一般來說,你要處理通過LocationChanged事件傳遞進來的Location對象.當然,你也可 以自己初始化這樣的對象(這在計算不同位置的距離和方位時非常有用).

最后一個類型是GPSSatellite.它也是一個結構,其保存當前識別的衛星的各種信息.它是通過GP SStatus事件傳遞給你的.

回到GPS.
GPS對象應該被定義成 Process_Global 對象.否則當activity重建時會建立一個新的實例.

第一步是初始化對象.像其它初始化方法一樣,它需要一個EventName參數. 這是完成GPS 對象事件的前綴.

下面是完整的代碼:

Code:
Sub Process_Globals
    
Dim GPS1 As GPS
End Sub

Sub Globals
    
Dim lblLon As Label
    
Dim lblLat As Label
    
Dim lblSpeed As Label
    
Dim lblSatellites As Label
End Sub

Sub Activity_Create(FirstTime As Boolean)
    
If FirstTime Then
      GPS1.Initialize(
"GPS")
     
End If
   Activity.LoadLayout(
"1")
End?Sub

Sub Activity_Resume
    
If GPS1.GPSEnabled = False Then
     
ToastMessageShow("Please enable the GPS device."True)
     
StartActivity(GPS1.LocationSettingsIntent) 'Will open the relevant settings screen.
    Else
      GPS1.Start(
00'Listen to GPS with no filters.
    End If
End Sub

Sub Activity_Pause (UserClosed As Boolean)
   GPS1.Stop
End Sub

Sub GPS_LocationChanged (Location1 As Location)
    lblLat.Text = 
"Lat = " & Location1.ConvertToMinutes(Location1.Latitude)
    lblLon.Text = 
"Lon = " & Location1.ConvertToMinutes(Location1.Longitude)
    lblSpeed.Text?= 
"Speed = " & Location1.Speed
End Sub

Sub GPS_UserEnabled(Enabled As Boolean)
    
ToastMessageShow("GPS device enabled = " & Enabled, True)
End?Sub

Sub GPS_GpsStatus (Satellites As List)
     lblSatellites.Text = 
"Satellites:" & CRLF
     
For i = 0 To Satellites.Size - 1
     
Dim Satellite As GPSSatellite
     Satellite = Satellites.Get(i)
     lblSatellites.Text = lblSatellites.Text & 
CRLF & Satellite.Prn & _
           
" " & Satellite.Snr & " " & Satellite.UsedInFix & " " & Satellite.Azimuth _ 
               & 
" " & Satellite.Elevation
 
Next
End Sub

下一步是通知GPS開始偵聽數據. GPS會消耗很多電量的.因此建議當你不使用的時候把它關掉.建議在Activity_Resume里面開 始偵聽並在Activity_Pause里面停止偵聽.

很多情況下,用戶會關閉GPS. 由於考慮到隱私,Android OS不允許在程序里打開GPS.最好的辦法就是請用戶打開GPS設備.

下面的代碼作用是如果GPS沒有打開的話,就會顯示一個信息,並打開GPS 控制面板,以便用戶直接可以選上GPS選項:

Code:
Sub Activity_Resume
   
If GPS1.GPSEnabled = False Then
     
ToastMessageShow("Please enable the GPS device."True)
     
StartActivity(GPS1.LocationSettingsIntent) 'Will open the relevant settings screen.
    Else
      GPS1.Start(
00'Listen to GPS with no filters.
    End If
End Sub

一旦 GPS打開后,就開始偵聽數據.Start方法使用兩個值,一個是最小時間(毫秒),一個是最小距離 ,它們是用來決定觸發時間的最小間隔,達到任意一個條件后,就會觸發事件. 這個可以用來節省電量.
在這里,我們都設置為0,以便可以接受所有的固定事件.

GPS觸發三個事件:
- GPS_LocationChanged (Location1 As Location)
這是主事件,Location1包括新的修正的值.

-GPS_GpsStatus (Satellites As List)
這個事件顯示當前搜到的衛星的信息. 請注意,不是所有的衛星被用來計算最后的修正值. 因此即就是這個列表有好幾個衛星,仍有可能接受到的數據不夠計算修正值.

- GPS_UserEnabled (Enabled As Boolean)
T一旦用戶改變了GPS 設備的狀態,就會觸發這個事件. 同時當調用Start后就會立即觸發這個事件.

.
附件在這里 GPS.zip (6.3 KB, 462 views)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM