先说一下GPS和GNSS的区别, 很多人把GPS等同于GNSS,我们在生活和工作中也常以GPS的概念描述GNSS。其实不然。

GNSS全球导航卫星系统(Global Navigation Satellite System)。泛指所有的卫星导航系统,包括全球的、区域的和增强的导航系统,如美国的GPS、俄罗斯的Glonass、欧洲的Galileo、中国的北斗卫星导航系统,以及相关的增强系统,如美国的WAAS(广域增强系统)、欧洲的EGNOS(欧洲静地导航重叠系统)和日本的MSAS(多功能运输卫星增强系统)等,还涵盖在建和以后要建设的其他卫星导航系统。国际GNSS系统是个多系统、多层面、多模式的复杂组合系统。

用简洁的公式表述就是:

GNSS = 卫星导航系统(GPS+Glonass+Galileo+Beidou等)+ 区域增强/扩增系统(WAAS+EGNOS+MSAS+QZSS+SBAS等)+ ...

最近犹豫工作需要,需要写一个测试GNSS搜星能力的工具。

1. Qcom平台默认提供“garden_app”命令可测试GNSS。该命令需要root权限才可运行。

2. server call 调用LocationManager相关接口进行搜星,同时打开相关log,查看log中搜星信息。该方法遇到传参问题。

3. 写一个GNSS测试apk,可界面显示搜星信息,也可将搜星信息写进文件,供其它工具读取。

调用的关键类及方法:

LocationManager.requestLocationUpdates()  //调用该接口发起搜星,需要定义接口所需参数,如LocationListener

GpsStatus, GpsStatus.Listener //通过该类获取卫星信息

GPS (1-32) / SBAS (33-54) / GLONASS (65-96) / QZSS (193-200) / BEIDOU (201-235) / GALILEO (301-) //android中定义的各个GNSS系统中卫星prn所属阈值。

代码如下:

package com.example.gpstest;import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Iterator;import android.app.Activity;
import android.location.GpsSatellite;
import android.location.GpsStatus;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.text.method.ScrollingMovementMethod;
import android.util.Log;
import android.widget.TextView;public class MainActivity<GpsStatellite, StingBuilder> extends Activity {protected static final String TAG = "GNSSTEST";private String GNSS_RESULT_FILE;    private static final long MIN_TIME_INTERVAL = 1 * 1000;private static final float MIN_DISTANCE_INTERVAL = 10;LocationManager mLocationManager = null;LocationListener mLocationListener = null;GpsStatus.Listener mListener= null;TextView gnss_result = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// /data/user/0/com.example.gpstest/files/gnss_result.txt, need root to cat// GNSS_RESULT_FILE= this.getFilesDir().getPath() + "/gnss_result.txt";GNSS_RESULT_FILE= "/sdcard/gnss_result.txt";mLocationManager = (LocationManager) getSystemService(LOCATION_SERVICE);mLocationListener = new LocationListener() {@Overridepublic void onStatusChanged(String arg0, int arg1, Bundle arg2) {// TODO Auto-generated method stub}@Overridepublic void onProviderEnabled(String arg0) {// TODO Auto-generated method stub}@Overridepublic void onProviderDisabled(String arg0) {// TODO Auto-generated method stub}@Overridepublic void onLocationChanged(Location arg0) {// TODO Auto-generated method stub}};mListener = new GpsStatus.Listener() {@Overridepublic void onGpsStatusChanged(int event) {// TODO Auto-generated method stubswitch (event) {case GpsStatus.GPS_EVENT_SATELLITE_STATUS:// get current statusGpsStatus gpsStatus = mLocationManager.getGpsStatus(null);// get MAX default number of statesint maxStatellites = gpsStatus.getMaxSatellites();// get all statesIterator<GpsSatellite> iters = gpsStatus.getSatellites().iterator();// calculate number of statesint stateNumber = 0;String type = "UNKNOWN";StringBuilder mStringBuilder = new StringBuilder();while (iters.hasNext() && stateNumber <= maxStatellites) {stateNumber++;GpsSatellite nextStatellite = iters.next();//get signal to noise ratiofloat snr = ((GpsSatellite) nextStatellite).getSnr();int prn = nextStatellite.getPrn();// check the type of statellite, GPS/GLONASS/BEIDOU or SBAS/QZSS// GPS (1-32) / SBAS (33-54) / GLONASS (65-96) / QZSS (193-200) / BEIDOU (201-235) / GALILEO (301-)if (1 <= prn && prn <= 32){type = "GPS";} else if (64 < prn && prn <=96) {type = "GLONASS";} else if (200 < prn && prn <= 235) {type = "BEIDOU";} else if (33 <= prn && prn <= 54) {type = "SBAS";} else if (193 <= prn && prn <= 200) {type = "QZSS";} else if (301 <= prn) {type = "GALILEO";}mStringBuilder.append("NO.").append(stateNumber).append("\t").append("snr: ").append(snr).append("\t").append("prn: ").append(prn).append("\t").append("type: ").append(type).append("\n");}gnss_result = (TextView) findViewById(R.id.text_view);gnss_result.setMovementMethod(ScrollingMovementMethod.getInstance());gnss_result.setText("total search statellite's number: "+ stateNumber + "\n" + mStringBuilder.toString());try {File file = new File(GNSS_RESULT_FILE);// if file doesn't exists, then create itif (!file.exists()) {file.createNewFile();}FileWriter fw = new FileWriter(file.getAbsoluteFile());BufferedWriter bw = new BufferedWriter(fw);bw.write("total search statellite's number: "+ stateNumber + "\n" + mStringBuilder.toString());bw.close();} catch (IOException e) {// TODO Auto-generated catch blockLog.e(TAG, "IOException in writing gnss informance to file");e.printStackTrace();}break;default:break;}}};mLocationManager.addGpsStatusListener(mListener);mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, MIN_TIME_INTERVAL, MIN_DISTANCE_INTERVAL, mLocationListener);}
}

GPS/GNSS测试工具相关推荐

  1. gps导航软件收发接受数据信息免费开源测试工具,最实用的GPS接收器测试详解

    记录空气中的 GPS 讯号 建立 GPS 波形时,其独特又日趋普遍的方式,即是直接从空气中撷取 单一卫星敏感度量测 在了解敏感度量测的基本理论之后,接着将进行实际量测的各个程序.一般测试系统均是透过直 ...

  2. 汽车应用和GPS综合测试中GPS/GNSS模拟测试新方案

    通过模拟进行GPS综合测试是一种简单.快速.有效的方式,虹科最新发布GPS/GNSS模拟器具有高级测试功能,只需一次路测,就可以进行多次重复模拟,并通过记录和回放进行修改.虹科HK-GSG系列GPS/ ...

  3. Betaflight BN880 GPS 简单测试

    Betaflight BN880 GPS 简单测试 1. 源由 2. 窗台对比测试 3. 开阔区域测试 3.1 GPS安装位置 3.1.1 BN880 GPS 机尾打印支架 安装位置 3.1.2 BN ...

  4. 高通平台GPS工程测试接收参数解析

    高通平台GPS工程测试&接收参数解析 前言 一.GPS工程测试 1.测试环境&仪器搭建 2.板子/整机状态 二.GPS接收机参数解析 1.灵敏度 2.空间衰减 3.SNR信噪比 4.C ...

  5. 【十年网络安全工程师整理】—100渗透测试工具使用方法介绍

    渗透测试是指渗透人员在不同的位置(比如从内网.从外网等位置)利用各种手段对 某个特定网络进行测试,以期发现和挖掘系统中存在的漏洞,然后输出渗透测试报告, 并提交给网络所有者.网络所有者根据渗透人员提供 ...

  6. 2020测试工具索引

    初次发布文章时,共收集435个工具! 这些测试工具均为博主人肉爬虫出来的,数据来源于: 百度.Google 各大博客.门户网站.论坛 个人测试经验 在整理过程中,我会尽量去官网找到官方对该工具的描述, ...

  7. 正确选择合适的移动应用测试工具很重要

    您知道吗,据Statista称,到 2025 年,智能手机用户数量将达到 182.2 亿?其实也不用惊讶,数字化转型正在飞速发展,并将继续如此.这给移动应用程序开发市场带来了各种选择,并引发了对最佳移 ...

  8. 10款移动app安全测试工具推荐

    移动互联网时代,我们的生活和工作深受 App 影响.伴随移动 App 的广泛应用,App 安全日益重要.本文介绍了 App 开发可能用到的安全测试工具. 当今,全球移动用户大约超过37亿.Google ...

  9. 基于uni-app的BLE低功耗蓝牙测试工具

    基于uni-app的BLE低功耗蓝牙测试工具 前言 开发环境:HBuilder X2.8.11,运行环境:微信小程序 本项目是从网上收集他人的源代码,经过测试.修改后的版本,在微信小程序上表现比较稳定 ...

最新文章

  1. win10每次开机都会自检系统盘(非硬件故障)——解决方案2019.07.12
  2. 在python子程序中、使用关键字_Python 的控制和函数
  3. 建模就用Rose的时代宣告结束
  4. arcgis中的python字符串比较
  5. IT部门绩效考核:一本糊涂账?
  6. h5获取http请求头_java学习之路(2),http协议,request类
  7. LeetCode 141 Linked List Cycle
  8. 关于一个简单算法的递归和循环转换实现
  9. 「S-A-L-T-A」项目失败总结!
  10. Windows界面编程:MFC
  11. 请问大家如何用MATLAB绘制四元函数图像
  12. 小米手机获取ROOT权限的一些坑及补坑经验
  13. C语言——恶搞关机小程序
  14. 作为程序员的硬实力是什么 ?
  15. 【Python】【C语言】P3353 在你窗外闪耀的星星
  16. 在Windows程序中打开控制台的程序
  17. gvim之Vimdiff 使用
  18. 零基础的我是这样开始写Python爬虫的(附代码)
  19. 谁与争锋,JDK动态代理大战CGLib动态代理
  20. 计算机电子信息类专业大学排名,电子信息工程专业大学排名 2020全国排行榜

热门文章

  1. WinForm加载网络图片并显示进度条
  2. 自定义函数5,is_leap_year判断是否为闰年
  3. mingw手工编译wxWidgets遇到的奇怪问题,及解决方案
  4. 2010年世界杯分组
  5. xmut,JavaPTA-01
  6. 可自由扩展的促销活动架构设计
  7. Android studio无线wifi adb调试
  8. 进程调度(执行,阻塞,就绪)
  9. OpenLayer学习之OGC数据
  10. 老师计算机组合照说说,教师微信朋友圈说说句子