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 GPSEnd Sub

Sub Globals    Dim lblLon As Label    Dim lblLat As Label    Dim lblSpeed As Label    Dim lblSatellites As LabelEnd 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(0, 0) 'Listen to GPS with no filters.    End IfEnd Sub

Sub Activity_Pause (UserClosed As Boolean)   GPS1.StopEnd 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.SpeedEnd 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 NextEnd 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(0, 0) 'Listen to GPS with no filters.    End IfEnd 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)

时间: 2024-10-11 11:40:56

basic4android 开发教程翻译(九)使用GPS的相关文章

basic4android 开发教程翻译(四)调试应用程序

这个教程说明在Basic4android v1.50 后加入的新的调试功能及其他相关的工具. 在Project菜单下有一个叫Attach Debugger的新选项. 如果这个选项是选上的话,那么编译的的代码就会包含调试代码. 调试代码允许IDE 与程序建立连接并检查它的运行. 当程序运行时,首先会等10秒钟与IDE 建立连接. 通常IDE 会很快连接上的. 然而当你手工从电话上运行这个程序时,就会看到这个等待. 编译的APK文件会以 _DEBUG.apk后缀保存.由于这个文件包含调试信息,因此一

basic4android 开发教程翻译(二)可视化设计与猜数字程序

要学习本教程,请先参考下面的教程:安装 Basic4android 和 Android SDKHello world - 安装Android 模拟器 在这个教程里面我们要使用设计器来建立layout. 这个layout包括一个文本框和一个按钮. 用户需要猜一个随机的数字. 用户在文本框里面输入数字并通过点按钮提交猜的数字. 然后系统会通过"toast"信息来给用户提示其输入的数字比系统选择的数字大还是小. - 建立一个新工程并保存它. -选择菜单来打开设计器. 设计器有两部分组成.一部

basic4android 开发教程翻译(七)Basic4android中的对象和类型

类型 Basic4android的类型系统是直接从Java的类型系统中派生的. 有两种类型的变量: 基本类型 and 非基本类型. 基本类型包括数字类型: Byte, Short, Int, Long, Float 和 Double. 基本类型也包括: Boolean 和 Char. 类型及范围列表: http://www.basic4ppc.com/forum/basic...html#post45511 但函数调用或者赋值时,基本类型总是直接把值传递过去. 例如: Code: Sub S1 

basic4android 开发教程翻译(五)Android进程及activitys 生存周期

简而言之 : 每个 Basic4android 程序在它自己的进程中运行. 一个进程拥有一个主线程,这个主线程也叫做UI 线程,它会一直运行到进程结束.一个进程也可以有好几个线程,这些线程用来做一些后台工作. 当用户启动一个应用时,一个进程就开始了工作, 假设其并没有已经在后台运行. 进程的结束是不确定的. 有时可能发生在用户或者系统关闭掉所有的activities后. 假设你有一个activity,当用户按了返回键,这个activity被关闭了. 以后当电话的内存不够时这个进程就会退出了(最后

basic4android 开发教程翻译(三)IDE 小贴士

basic4android 的 IDE 功能强大,它帮助你专注于写代码和建立你的应用. 下面列出一些不容易发现的特色: - Ctrl + Space = 自动完成 按 Ctrl + Space 激活自动完成功能,它会把得到的关键字,变量,模块,方法,子程,属性,字段等以列表显示出来 . 并且在很多时候会列出这些项目的描述. 在写了一些字母后按 Ctrl + Space通常会自动出现以这些字母开头的项目. - 工具提示信息 - 当写方法的参数时,工具提示会显示方法的定义和描述. 工具提示有时可能会

basic4android 开发教程翻译(八)使用ListView

ListView 控件是一个非常强大的控件. 它可以以非常雅致的方式来显示长的或者短的列表. 建立一个ListView 非常简单: Code: Sub Globals Dim ListView1 As ListViewEnd Sub Sub Activity_Create(FirstTime As Boolean)    ListView1.Initialize("ListView1")    For i = 1 To 300       ListView1.AddSingleLine

Android简明开发教程十九:线程 Bezier曲线

Android中使用线程Thread的方法和Java SE相同.和大多数OS系统一样,Android中也有称为UI Thread的主线程.UI Thread 主要用来给相应的Widget分发消息,包括绘制(Drawing)事件.UI Thread 也是用来处理用户交互事件的线程.比如:如果你 按下屏幕上某个按钮,UI 线程则将Touch 事件通知对应的控件(Widgets),Widget 则将其状态设置成"按下",并把"重绘" (Invalidate)事件发到Eve

Android LibGDX游戏引擎开发教程(九) 动画类的使用

对于一款成功的游戏,动画效果也是整个游戏中不可或缺的元素之一,那下面我们就来讲解一下动画类的 使用方法. 一.Animation类 1.Animation介绍 开发教程(九) 动画类的使用-android 动画引擎"> 该类存放在 com.badlogic.gdx.graphics.g2d的包下,该类继承自Object. 2.Animation定义 这 是官方API的定义,大概的意思是说:一个动画就是存放了一个列表的图片表示在设定的时间间隔序列的显示 .比如,一个正在跑步或者正在跳动的人.

Senparc.Weixin.MP SDK 微信公众平台开发教程(九):自定义菜单接口说明

原文:Senparc.Weixin.MP SDK 微信公众平台开发教程(九):自定义菜单接口说明     上一篇<Senparc.Weixin.MP SDK 微信公众平台开发教程(八):通用接口说明>介绍了如何通过通用接口获取AccessToken,有了AccessToken,我们就可以来操作自定义菜单,以及其他的高级接口,这一篇单讲自定义菜单.   一.自定义菜单规则 自定义菜单分为一级菜单和二级菜单. 一级菜单数量为1-3个,即打开公众账号直接可以看到排列在最下方的最多3个按钮.一级菜单的