网球

AndroidGPS定位测试通信网络

2020-07-28 19:03:18来源:励志吧0次阅读

Android GPS 定位测试 - 通信/络 - 电子工程

1、Android 定位服务

下面我们先来看看Android有关定位服务提供的支持:

Android定位服务都是位于location下,上面都有相关说明,这里就不详细解析。有一点有需要说说的

是:eaListener 官方的说法是可以读取NMEA数据,但是我这里测试发现,并没有读取到NMEA的数据。查阅过一些资料,说是google在底层并没有实现数据反馈的功能。有时间,需要查看一下源码。

3、LocationManager定位

//Edited by mythou//获取定位服务LocationManager locationManager = (LocationManager) tSystemService(CATION_SERVICE);//判断是否已经打开GPS模块if (ProviderEnabled(S_PROVIDER)){//GPS模块打开,可以定位操作}// 通过GPS定位String LocateType= S_PROVIDER;Location location = tLastKnownLocation(LocateType);// 设置监听器,设置自动更新间隔这里设置1000ms,移动距离:0米。questLocationUpdates(provider, 1000, 0, locationListener);// 设置状态监听回调函数。statusListener是监听的回调函数。dGpsStatusListener(statusListener);//另外给出 通过network定位设置String LocateType= WORK_PROVIDER;Location location = tLastKnownLocation(LocateType);复制代码

3、GpsStatus监听器

上面给出了定位服务的初始化设置步骤,但我们都知道GPS卫星是定期广播数据的,也就是说会定期收到卫星的GPS数据。我们并不能跟卫星主动申请数据,只能被动接收数据。(中国的北斗2倒是可以发送卫星报文给卫星)因此我们需要注册一个监听器来处理卫星返回的数据。

//Edited by mythou// final stener statusListener = new stener(){public void onGpsStatusChanged(int event){// GPS状态变化时的回调,获取当前状态GpsStatus status = tGpsStatus(null);//自己编写的方法,获取卫星状态相关数据GetGPSStatus(event, status);}};复制代码

4、获取搜索到的卫星

//Edited by mythou// void GetGPSStatus(int event, GpsStatus status){Log.d(TAG, enter the updateGpsStatus() if (status == null){}else if (event == S_EVENT_SATELLITE_STATUS){//获取最大的卫星数(这个只是一个预设值)int maxSatellites = tMaxSatellites();Iterator it = tSatellites().iterator();ear();//记录实际的卫星数目int count = 0;while (sNext() count = maxSatellites){//保存卫星的数据到一个队列,用于刷新界面GpsSatellite s = xt();d(s);count++;Log.d(TAG, updateGpsStatus----count= +count);}mSatelliteNum = ze();}else if(event==S_EVENT_STARTED){//定位启动}else if(event==S_EVENT_STOPPED){//定位结束}}复制代码

上面就是从状态值里面获取搜索到的卫星数目,主要是通过tSatellites()实现。获取到的GpsSatellite对象,

保存到一个队列里面,用于后面刷新界面。上面是获取GPS状态监听器,除了GPS状态外,我们还需要监听一个服务,

就是:LocationListener,定位监听器,监听位置的变化。这个对做定位服务的应用来说,十分重要。

5、LocationListener监听器

//Edited by mythou// final LocationListener locationListener = new LocationListener(){public void onLocationChanged(Location location){//当坐标改变时触发此函数,如果Provider传进相同的坐标,它就不会被触发updateToNewLocation(location);Log.d(TAG, LocationListeneronLocationChanged }public void onProviderDisabled(String provider){//Provider被disable时触发此函数,比如GPS被关闭Log.d(TAG, LocationListeneronProviderDisabled }public void onProviderEnabled(String provider){// Provider被enable时触发此函数,比如GPS被打开Log.d(TAG, LocationListeneronProviderEnabled }public void onStatusChanged(String provider, int status, Bundle extras){Log.d(TAG, LocationListeneronStatusChanged // Provider的转态在可用、暂时不可用和无服务三个状态直接切换时触发此函数if (status == T_OF_SERVICE || status == MPORARILY_UNAVAILABLE) {}}};复制代码

位置监听回调是用来处理GPS位置发生变化的时候,自动回调的方法,我们可以从这里获取到当前的GPS数据。另外我们可以通过回调函数提供的location参数,获取GPS的地理位置信息,包括经纬度、速度、海拔等信息。

6、获取地理位置信息(经纬度、卫星数目、海拔、定位状态)

//Edited by mythou

//

//location对象是从上面定位服务回调函数的参数获取。

mLatitude = tLatitude(); // 经度

mLongitude = tLongitude(); // 纬度

mAltitude = tAltitude(); //海拔

mSpeed = tSpeed(); //速度

mBearing = tBearing(); //方向

7、获取指定卫星信息(方向角、高度角、信噪比)

//Edited by mythou

//

//temgGpsSatellite就是我们上面保存的搜索到的卫星

//方向角

float azimuth = tAzimuth();

//高度角

float elevation = tElevation();

//信噪比

float snr = tSnr();

利用方向角、高度角我们可以绘画出一个二维图形,表示卫星在地球那个方位,信噪比作用更大。一般的卫星定位测试软件,都提供了信噪比的状态图,这是表示GPS模块搜星能力的代表。

8、绘画二维卫星位置图

下面是我做的GPS测试的效果图:

下面给出一个根据方向角和高度角,计算卫星二维图里面位置的方法,上面效果图左边的绿色圆点就代表卫星位置。

右边的信噪比柱状图,代表卫星的接收信号能力。

以上是本文关于Android GPS 定位测试的详细讲解,希望本文对广大安卓开发者有所帮助,感谢阅读本文。更多安卓技术问题欢迎加群探讨:,验证码:eec,不写验证不予通过哟~


温州白癜风专科医院是哪个
舟山白斑疯医院
肇庆治疗白癜风多少钱
汉中治疗白癜风
韶关哪家医院治疗白癜风
分享到: