basic4android 开发教程翻译(九)使用GPS

简介: GPS在很多Android设备上扮演很重要的角色. 幸运的是可以很方便的使其工作起来. 在这个教程里面我们将完成一个程序,它可以显示当前位置并显示卫星状态. GPS功能被封装在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)

目录
相关文章
|
5天前
|
Linux 编译器 Android开发
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
在Linux环境下,本文指导如何交叉编译x265的so库以适应Android。首先,需安装cmake和下载android-ndk-r21e。接着,下载x265源码,修改crosscompile.cmake的编译器设置。配置x265源码,使用指定的NDK路径,并在配置界面修改相关选项。随后,修改编译规则,编译并安装x265,调整pc描述文件并更新PKG_CONFIG_PATH。最后,修改FFmpeg配置脚本启用x265支持,编译安装FFmpeg,将生成的so文件导入Android工程,调整gradle配置以确保顺利运行。
24 1
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
|
27天前
|
Java Android开发
Android 开发获取通知栏权限时会出现两个应用图标
Android 开发获取通知栏权限时会出现两个应用图标
14 0
|
1月前
|
XML 缓存 Android开发
Android开发,使用kotlin学习多媒体功能(详细)
Android开发,使用kotlin学习多媒体功能(详细)
103 0
|
1月前
|
设计模式 人工智能 开发工具
安卓应用开发:构建未来移动体验
【2月更文挑战第17天】 随着智能手机的普及和移动互联网技术的不断进步,安卓应用开发已成为一个热门领域。本文将深入探讨安卓平台的应用开发流程、关键技术以及未来发展趋势。通过分析安卓系统的架构、开发工具和框架,本文旨在为开发者提供全面的技术指导,帮助他们构建高效、创新的移动应用,以满足不断变化的市场需求。
18 1
|
1月前
|
机器学习/深度学习 调度 Android开发
安卓应用开发:打造高效通知管理系统
【2月更文挑战第14天】 在移动操作系统中,通知管理是影响用户体验的关键因素之一。本文将探讨如何在安卓平台上构建一个高效的通知管理系统,包括服务、频道和通知的优化策略。我们将讨论最新的安卓开发工具和技术,以及如何通过这些工具提高通知的可见性和用户互动性,同时确保不会对用户造成干扰。
33 1
|
2天前
|
数据库 Android开发 开发者
安卓应用开发:构建高效用户界面的策略
【4月更文挑战第24天】 在竞争激烈的移动应用市场中,一个流畅且响应迅速的用户界面(UI)是吸引和保留用户的关键。针对安卓平台,开发者面临着多样化的设备和系统版本,这增加了构建高效UI的复杂性。本文将深入分析安卓平台上构建高效用户界面的最佳实践,包括布局优化、资源管理和绘制性能的考量,旨在为开发者提供实用的技术指南,帮助他们创建更流畅的用户体验。
|
19天前
|
XML 开发工具 Android开发
构建高效的安卓应用:使用Jetpack Compose优化UI开发
【4月更文挑战第7天】 随着Android开发不断进化,开发者面临着提高应用性能与简化UI构建流程的双重挑战。本文将探讨如何使用Jetpack Compose这一现代UI工具包来优化安卓应用的开发流程,并提升用户界面的流畅性与一致性。通过介绍Jetpack Compose的核心概念、与传统方法的区别以及实际集成步骤,我们旨在提供一种高效且可靠的解决方案,以帮助开发者构建响应迅速且用户体验优良的安卓应用。
|
21天前
|
监控 算法 Android开发
安卓应用开发:打造高效启动流程
【4月更文挑战第5天】 在移动应用的世界中,用户的第一印象至关重要。特别是对于安卓应用而言,启动时间是用户体验的关键指标之一。本文将深入探讨如何优化安卓应用的启动流程,从而减少启动时间,提升用户满意度。我们将从分析应用启动流程的各个阶段入手,提出一系列实用的技术策略,包括代码层面的优化、资源加载的管理以及异步初始化等,帮助开发者构建快速响应的安卓应用。
|
21天前
|
Java Android开发
Android开发之使用OpenGL实现翻书动画
本文讲述了如何使用OpenGL实现更平滑、逼真的电子书翻页动画,以解决传统贝塞尔曲线方法存在的卡顿和阴影问题。作者分享了一个改造后的外国代码示例,提供了从前往后和从后往前的翻页效果动图。文章附带了`GlTurnActivity`的Java代码片段,展示如何加载和显示书籍图片。完整工程代码可在作者的GitHub找到:https://github.com/aqi00/note/tree/master/ExmOpenGL。
23 1
Android开发之使用OpenGL实现翻书动画
|
21天前
|
Android开发 开发者
Android开发之OpenGL的画笔工具GL10
这篇文章简述了OpenGL通过GL10进行三维图形绘制,强调颜色取值范围为0.0到1.0,背景和画笔颜色设置方法;介绍了三维坐标系及与之相关的旋转、平移和缩放操作;最后探讨了坐标矩阵变换,包括设置绘图区域、调整镜头参数和改变观测方位。示例代码展示了如何使用这些方法创建简单的三维立方体。
18 1
Android开发之OpenGL的画笔工具GL10