GPS北斗双模技术应用开发研究—应用数据交互

GPS北斗双模技术应用开发研究—应用数据交互

Android开发原则就是谁对哪个数据感兴趣就可以通过listener去监听一下,那边定位数据肯定也是这样的,关于位置上报的话,笔者不准备在这累赘了,网上好多文章,下面就讲一下双模相关的北斗gps卫星星图搜星具体情况的数据上报以及私有协议的定制。

在locationmanager里面有一个接口addGpsStatusListener,在应用里通过这个接口把listen传下去,这中间有很多过程,最终这个listener在location的provider里面存了起来,中间被service转了一手,但是service里面是直接用的provider的addGpsStatusListener。下面可以看看service里面的addGpsStatusListener接口情况,如下:

    public boolean addGpsStatusListener(IGpsStatusListener listener, String packageName) {
        if (mGpsStatusProvider == null) {
            return false;
        }
        int allowedResolutionLevel = getCallerAllowedResolutionLevel();
        checkResolutionLevelIsSufficientForProviderUse(allowedResolutionLevel,
                LocationManager.GPS_PROVIDER);

        final int uid = Binder.getCallingUid();
        final long ident = Binder.clearCallingIdentity();
        try {
            if (!checkLocationAccess(uid, packageName, allowedResolutionLevel)) {
                return false;
            }
        } finally {
            Binder.restoreCallingIdentity(ident);
        }

        try {
            mGpsStatusProvider.addGpsStatusListener(listener);
        } catch (RemoteException e) {
            Slog.e(TAG, "mGpsStatusProvider.addGpsStatusListener failed", e);
            return false;
        }
        return true;
    }

这里就注册下去了。这样就相当于在provider里面就挂了个钩子了,一旦有新数据更新就可以直接传到应用里面了,当然这个listener中间转的那几手有兴趣的可以去看看代码,都不难看懂的。那看看卫星sv状态上报吧,直接触发了listener的onSvStatusChanged接口,如下:

    private void reportSvStatus() {

        int svCount = native_read_sv_status(mSvs, mSnrs, mSvElevations, mSvAzimuths, mSvMasks);

        synchronized (mListeners) {
            int size = mListeners.size();
            for (int i = 0; i < size; i++) {
                Listener listener = mListeners.get(i);
                try {
                    listener.mListener.onSvStatusChanged(svCount, mSvs, mSnrs,
                            mSvElevations, mSvAzimuths, mSvMasks[EPHEMERIS_MASK],
                            mSvMasks[ALMANAC_MASK], mSvMasks[USED_FOR_FIX_MASK],
                            mSvMasks[BD_SVS_NUM], mSvMasks[BD_EPHEMERIS_MASK],
                            mSvMasks[BD_ALMANAC_MASK],mSvMasks[BD_USED_FOR_FIX_MASK]);
                } catch (RemoteException e) {
                    Log.w(TAG, "RemoteException in reportSvInfo");
                    mListeners.remove(listener);
                    // adjust for size of list changing
                    size--;
                }
            }
        }

这样就call到了GpsStatusListenerTransport里面的onSvStatusChanged了,在这里面要下点文章,它会发送一个GpsStatus.GPS_EVENT_SATELLITE_STATUS的消息,但是没有带参数,笔者就把两个参数利用起来了,一个存gps的数量,一个存北斗的数量。这个消息发送出去以后,会在他的handle里面处理转换一次。

        private final Handler mGpsHandler = new Handler() {
            @Override
            public void handleMessage(Message msg) {
                if (msg.what == NMEA_RECEIVED) {
                    synchronized (mNmeaBuffer) {
                        int length = mNmeaBuffer.size();
                        for (int i = 0; i < length; i++) {
                            Nmea nmea = mNmeaBuffer.get(i);
                            mNmeaListener.onNmeaReceived(nmea.mTimestamp, nmea.mNmea);
                        }
                        mNmeaBuffer.clear();
                    }
                } else {
                    // synchronize on mGpsStatus to ensure the data is copied atomically.
                    synchronized(mGpsStatus) {
                    if(GpsStatus.GPS_EVENT_SATELLITE_STATUS == msg.what){
						int pri_event ;
						pri_event = 0x77 + (msg.arg1<<8) + (msg.arg2<<16);
						//Log.d(TAG, "LM: msg.arg1 "+msg.arg1 +" msg.arg2 "+msg.arg2+ " pri "+pri_event);
                        mListener.onGpsStatusChanged(pri_event);						

                    }

                        mListener.onGpsStatusChanged(msg.what);
                    }
                }
            }

因此,在转发消息的时候做一下特殊处理,合成一个特殊的消息,带上我们的gps数量北斗数量,其他没有什么特别的了,第三方应用同样也可以收到sv的变化,只是不知道gps跟北斗具体的数量。其他没有差异。

时间: 2024-11-03 01:23:07

GPS北斗双模技术应用开发研究—应用数据交互的相关文章

GPS北斗双模技术应用开发研究—数据结构扩展

GPS北斗双模技术应用开发研究-数据结构扩展 还是从gps.h头文件入手,首先 GpsSvStatus结构体需要改造,GpsSvStatus当时设计的时候是考虑存储gps卫星信息的,但是我们现在是要存储双模的数据,因此我们需要扩展这个数据结构,那怎么扩展呢? 当然要代价小一点,不能完全推倒重来的,笔者想到的就是增加一个北斗卫星数量的变量,以及北斗的epemeris.almanac.还有一个定位的mask,以前数据结构里面的成员全部用着gps存储,这样就相互独立了,但是sv_list笔者就偷懒共用

GPS北斗双模技术应用开发研究--几个基本关键词

最近在调试GPS北斗双模,目前已经都调试通了,下面就来说一下涉及的几个关键词. GPS:   GPS是英文Global Positioning System(全球定位系统)的简称.GPS起始于1958年美国军方的一个项目,1964年投入使用.20世纪70年代,美国陆海空三军联合研制了新一代卫星定位系统GPS .主要目的是为陆海空三大领域提供实时.全天候和全球性的导航服务,并用于情报搜集.核爆监测和应急通讯等一些军事目的,经过20余年的研究实验,耗资300亿美元,到1994年,全球覆盖率高达98%

GPS北斗双模技术应用开发研究--数据解析

上一篇文章大家介绍了几个重要的概念,那下面我们就来解析一下这样的双模输出log,在解析之前我们来看看各个重要标准字段的意义.笔者在实际开发中只用到了其中的四个,分别是GGA,GSA,GSV,RMC,GLL,当然还有其他一些字段,感觉有些是重复的,根据需要解析就好了.下面就分别介绍一下: $XXGGA,(1),(2),(3),(4),(5),(6),(7),(8),(9),M,(10),M,(11),(12)*hh(CR)(LF) 各部分所对应的含义为: (1)定位UTC时间:05时09分01秒

SYN2306A型 GPS北斗双模授时板

SYN2306A型 GPS北斗双模授时板 产品概述 SYN2306A型GPS北斗双模授时板是由西安同步电子科技有限公司精心设计.自行研发生产的一款双模授时板卡,接收北斗或者GPS北斗混合授时卫星信号,使用北斗定时信号对本机进行时间同步,产生串口时间信息信号和1PPS(秒信号)同步脉冲信号,是建立时间尺度.实现时间统一同步的实用授时板卡. 产品功能 1)   单芯片支持BD2/GPS功能,无需外接CPU即可直接输出NMEA数据: 2)   支持单系统独立定位和多系统联合定位 3)   使用GPS/

Hybrid小程序混合开发之路 - 数据交互

HTML+CSS是历史悠久.超高自由度.控制精准.表现能力极强.编码简单.学习门槛超低.真跨平台的一种UI界面开发方式. 本文介绍的是微信小程序和H5混合开发的一种数据交互方式. 很多应用在原生界面中混杂着HTML界面 记得xp时代的QQ,有些界面偶尔会弹出熟悉的js错误对话框,还能右键弹出熟悉的IE6的右键菜单,伪装的挺好,差点没认出来,现在的QQ就不知道了. 美团.淘宝这些拥有几乎无限界面的手机App,顶部进度条一亮,这是一个H5 没谁了! Electron!好嗨哟~ 数据交互 使用了HTM

上海华测中标缅甸520台北斗GPS RTK双模接收机项目

上海华测导航技术有限公司(下称"上海华测")近日中标缅甸农业部520台套北斗/GPS双模卫星导航实时动态差分接收机,将应用于缅甸农业数据的采集统计.土地估值和土地管理等方面. 此前,缅甸国家农业部曾向全球公开招标采购高精度全球卫星导航定位系统接收机. 上海华测专注于国产GNSS研发.生产.及销售,主要为客户提供高精度单频测量型GNSS接收机.双频实时动态GNSS接收机.GNSS姿态测量系统.手持GIS终端.无线数传产品和水上测量产品等,是中国第一台双频毫米级GNSS测量接收机和国内第一

荣品电子2代三星六核5260开发板支持GPS+北斗4G上网蓝牙4.0

荣品2代三星六核Exynos5260开发板搭配Android4.4.2+10.1寸IPS液晶屏(1920*1200),运行主频1300MHz~1700MHz:2G DDR3内存+16G EMMC存储,800W自动对焦摄像头,支持UBS3.0.GPS+北斗.4G上网(包括移动.联通.电信),蓝牙4.0 产品名称:RP5260开发板(4G全功能版) 产品型号:RP5260-4G 核心板型号:RP5260核心板(2G内存+16G存储) RP-Exynos5260开发板评估板是荣品电子于15年初发布的一

gps/北斗开发的历程

我们是NS团队(扣Q:33504767)2005年成立于北京市中关村,是一家专注于移动互联网整体服务的团队,在GPS/北斗等应用领域处于领先地位.2011年2月成立专业的手机应用程序开发组:提供iPhone.iPad.andriod/pad App.微信.html5,为企业用户提供全套定制解决方案.2005年推出c/s架构下的车载GPS监控系统:2008年推出B/S架构(.net)下的车载GPS监控系统:2011年推出基于B/S架构(java)体系+Android的车载GPS监控系统2013年推

用“MEAN”技术栈开发web应用(三)用mongodb搭建数据库

上一篇介绍了如何用express搭建起服务端MVC的开发架构,本篇我们来详细介绍一下这个Model层,也就是数据库访问层.包含如何使用mongodb搭建数据库,以及如何使用mongoose来访问数据. mongodb的安装和启动 首先我们得安装mongodb,先去官网( http://www.mongodb.org/downloads)下载安装包,我的开发环境是Windows,所以下载Windows下的iso文件,根据提示一路安装完毕即可,没什么需要特别选择的. 安装完后,为了能在cmd中全局都