1、平台:rk3128 android5.1
2、所需资源:
gps.default.so (android5.1 GPS库)
3、移植:
32
位系统下,将
gps.default.so
文件放在目录
/system/lib/hw
下,(rk3128)
64
位系统下,将
gps.default.so
文件放在目录
/system/lib64/hw
下。
eg:
![](https://img-blog.csdnimg.cn/20200925210404164.png)
4、开启android gps支持(rk3128默认没有开启)
方法一:(推荐)
device/rockchip/common/BoardConfig.mk文件中,
# product has GPS or not
BOARD_HAS_GPS := true (false 改为 ture)(使支持gps)
方法二:(不推荐)
device/rockchip/common/device.mk +340
将红框false改为ture
![](https://img-blog.csdnimg.cn/20200925210404173.png)
5、设置默认定位模式以及打开gps log
①persist.gps.start属性,为gps即gps模式,为agps即为agps模式,这里设置为gps模式
②Hal
库的日志打印是通过安卓属性
persist.gpslog.start
控制的,属性值为
1
时,开启打印,为
0
时关闭打印
如下:
vim ./system/core/rootdir/init.rc
![](https://img-blog.csdnimg.cn/20200925210404171.png)
6、调试
①
通过指令
getprop | grep gps
查询
gps
相关属性值
② logcat | grep -i "gps" 查询相关gps log
③底层调试at命令
at+zginit
at+zgmode=3
at+zgport=2
at+zgnmea=31
at+zgmeasure=1
t+zgrun=2
补充:
①安装相关测试apk测试gps是否正常!
②使用配套的gps天线,并处于空旷地段调试
7、相、关知识补充
关于android定位方式
android 定位一般有四种方法,这四种方式分别是GPS定位、WIFI定位、基站定位、AGPS定位。
1、 Android GPS
需要GPS硬件支持直接和卫星交互来获取当前经纬度,这种方式需要手机支持GPS模块现在大部分的智能机应该都有了。通过GPS方式准确度是最高的但是它的缺点也非常明显。
1、 比较耗电
2、 绝大部分用户默认不开启GPS模块
3、 从GPS模块启动到获取第一次定位数据可能需要比较长的时间
4、 室内几乎无法使用。
这其中缺点2、3都是比较致命的。需要指出的是GPS走的是卫星通信的通道在没有网络连接的情况下也能用。
2、 Android基站定位
Android基站定位只要明白了基站/WIFI定位的原理自己实现基站/WIFI定位其实不难。基站定位一般有几种:第一种是利用手机附近的三个基站进行三角定位,由于每个基站的位置是固定的,利用电磁波在这三个基站间中转所需要时间来算出手机所在的坐标;第二种则是利用获取最近的基站的信息,其中包括基站 id、location area code、mobile country code、mobile network code和信号强度将这些数据发送到google的定位web服务里,就能拿到当前所在的位置信息,误差一般在几十米到几百米之内。其中信号强度这个数据很重要。
3、 Android Wifi定位
根据一个固定的Wifi MAC地址通过收集到的该Wifi热点的位置然后访问网络上的定位服务以获得经纬度坐标。因为它和基站定位其实都需要使用网络所以在Android也统称为Network方式。
4、 AGPS定位
AGPS(AssistedGPS)辅助全球卫星定位系统是结合GSM或GPRS与传统卫星定位利用基地台代送辅助卫星信息以缩减GPS芯片获取卫星信号的延迟时间受遮盖的室内也能借基地台讯号弥补减轻GPS芯片对卫星的依赖度。和纯GPS、基地台三角定位比较,AGPS能提供范围更广、更省电、速度更快的定位服务。理想误差范围在10公尺以内,日本和美国都已经成熟运用AGPS于LBS服务(Location Based Service)基于位置的服务。AGPS技术是一种结合了网络基站信息和GPS信息对移动台进行定位的技术,可以在GSM/GPRS、WCDMA和CDMA2000网络中进行使用。该技术需要在手机内增加GPS接收机模块并改造手机的天线,同时要在移动网络上加建位置服务器、差分GPS基准站等设备。AGPS解决方案的优势主要体现在其定位精度上在室外等空旷地区其精度在正常的GPS工作环境下可以达到10米左右,堪称目前定位精度最高的一种定位技术。该技术的另一优点为首次捕获GPS信号的时间一般仅需几秒,不像GPS的首次捕获时间可能要2-3分钟。
模块输出信息主要包括4个部分:
1、GPS定位信息GPGGA(Global Positioning SystemFix Data)
-
$GPGGA,063740.998,2234.2551,N,11408.0339,E,1,08,00.9,00053.A,M,-2.1,M,,*7B
-
$GPGGA, < 1 > , < 2 > , < 3 > , < 4 > , < 5 > , < 6 > , < 7 > , < 8 > , < 9 > ,M, < 10 > ,M, < 11 > , < 12 > *hh < CR > < LF >
-
< 1 > UTC时间,hhmmss(时分秒)格式
-
< 2 > 纬度ddmm.mmmm(度分)格式(前面的0也将被传输)
-
< 3 > 纬度半球N(北半球)或S(南半球)
-
< 4 > 经度dddmm.mmmm(度分)格式(前面的0也将被传输)
-
< 5 > 经度半球E(东经)或W(西经)
-
< 6 > GPS状态: 0 =未定位, 1 =非差分定位, 2 =差分定位, 6 =正在估算
-
< 7 > 正在使用解算位置的卫星数量(00~12)(前面的0也将被传输)
-
< 8 > HDOP水平精度因子(0.5~99.9)
-
< 9 > 海拔高度(-9999.9~99999.9)
-
< 10 > 地球椭球面相对大地水准面的高度
-
< 11 > 差分时间(从最近一次接收到差分信号开始的秒数,如果不是差分定位将为空)
-
< 12 > 差分站ID号0000~1023(前面的0也将被传输,如果不是差分定位将为空)
$GPGGA,063740.998,2234.2551,N,11408.0339,E,1,08,00.9,00053.A,M,-2.1,M,,*7B
$GPGGA,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,M,<10>,M,<11>,<12>*hh<CR><LF>
<1> UTC时间,hhmmss(时分秒)格式
<2> 纬度ddmm.mmmm(度分)格式(前面的0也将被传输)
<3> 纬度半球N(北半球)或S(南半球)
<4> 经度dddmm.mmmm(度分)格式(前面的0也将被传输)
<5> 经度半球E(东经)或W(西经)
<6> GPS状态:0=未定位,1=非差分定位,2=差分定位,6=正在估算
<7> 正在使用解算位置的卫星数量(00~12)(前面的0也将被传输)
<8> HDOP水平精度因子(0.5~99.9)
<9> 海拔高度(-9999.9~99999.9)
<10> 地球椭球面相对大地水准面的高度
<11> 差分时间(从最近一次接收到差分信号开始的秒数,如果不是差分定位将为空)
<12> 差分站ID号0000~1023(前面的0也将被传输,如果不是差分定位将为空)
2、当前卫星信息GPGSA(GPS DOP and ActiveSatellites)
-
$GPGSA,A,3,06,16,14,22,25,01,30,20,,,,,01.6,00.9,01.3*0D
-
$GPGSA, < 1 > , < 2 > , < 3 > , < 3 > ,,,,, < 3 > , < 3 > , < 3 > , < 4 > , < 5 > , < 6 > , < 7 > < CR > < LF >
-
< 1 > 模式 : M = 手动, A = 自动。
-
< 2 > 定位型式 1 = 未定位, 2 = 二维定位, 3 = 三维定位。
-
< 3 > PRN 数字:01 至 32 表天空使用中的卫星编号,最多可接收12颗卫星信息。
-
< 4 > PDOP位置精度因子(0.5~99.9)
-
< 5 > HDOP水平精度因子(0.5~99.9)
-
< 6 > VDOP垂直精度因子(0.5~99.9)
-
< 7 > Checksum.(检查位).
$GPGSA,A,3,06,16,14,22,25,01,30,20,,,,,01.6,00.9,01.3*0D
$GPGSA,<1>,<2>,<3>,<3>,,,,,<3>,<3>,<3>,<4>,<5>,<6>,<7><CR><LF>
<1>模式 :M = 手动, A = 自动。
<2>定位型式 1 = 未定位, 2 = 二维定位, 3 = 三维定位。
<3>PRN 数字:01 至 32 表天空使用中的卫星编号,最多可接收12颗卫星信息。
<4> PDOP位置精度因子(0.5~99.9)
<5> HDOP水平精度因子(0.5~99.9)
<6> VDOP垂直精度因子(0.5~99.9)
<7> Checksum.(检查位).
3、可见卫星信息GPGSV(GPS Satellites in View)
-
$GPGSV,2,1,08,06,26,075,44,16,50,227,47,14,57,097,44,22,17,169,41*70
-
$GPGSV,2,2,08,25,49,352,45,01,64,006,45,30,13,039,39,20,15,312,34*7A
-
$GPGSV, < 1 > , < 2 > , < 3 > , < 4 > , < 5 > , < 6 > , < 7 > ,? < 4 > , < 5 > , < 6 > , < 7 > , < 8 > < CR > < LF >
-
< 1 > GSV语句的总数
-
< 2 > 本句GSV的编号
-
< 3 > 可见卫星的总数,00 至 12。
-
< 4 > 卫星编号, 01 至 32。
-
< 5 > 卫星仰角, 00 至 90 度。
-
< 6 > 卫星方位角, 000 至 359 度。实际值。
-
< 7 > 讯号噪声比(C/No), 00 至 99 dB;无表未接收到讯号。
-
< 8 > Checksum.(检查位).
-
第 < 4 > , < 5 > , < 6 > , < 7 > 项个别卫星会重复出现,每行最多有四颗卫星。其余卫星信息会于次一行出现,若未使用,这些字段会空白。
$GPGSV,2,1,08,06,26,075,44,16,50,227,47,14,57,097,44,22,17,169,41*70
$GPGSV,2,2,08,25,49,352,45,01,64,006,45,30,13,039,39,20,15,312,34*7A
$GPGSV,<1>,<2>,<3>,<4>,<5>,<6>,<7>,?<4>,<5>,<6>,<7>,<8><CR><LF>
<1> GSV语句的总数
<2> 本句GSV的编号
<3> 可见卫星的总数,00 至 12。
<4> 卫星编号, 01 至 32。
<5>卫星仰角, 00 至 90 度。
<6>卫星方位角, 000 至 359 度。实际值。
<7>讯号噪声比(C/No), 00 至 99 dB;无表未接收到讯号。
<8>Checksum.(检查位).
第<4>,<5>,<6>,<7>项个别卫星会重复出现,每行最多有四颗卫星。其余卫星信息会于次一行出现,若未使用,这些字段会空白。
4、推荐最小定位信息GPRMC(Recommended MinimumSpecific GPS/TRANSIT Data)
-
$GPRMC,012724.000,A,2234.3157,N,11408.0921,E,0.00,,290108,,,A*71
-
$GPRMC, < 1 > , < 2 > , < 3 > , < 4 > , < 5 > , < 6 > , < 7 > , < 8 > , < 9 > , < 10 > , < 11 > , < 12 > *hh < CR > < LF >
-
< 1 > UTC时间,hhmmss(时分秒)格式
-
< 2 > 定位状态, A =有效定位, V =无效定位
-
< 3 > 纬度ddmm.mmmm(度分)格式(前面的0也将被传输)
-
< 4 > 纬度半球N(北半球)或S(南半球)
-
< 5 > 经度dddmm.mmmm(度分)格式(前面的0也将被传输)
-
< 6 > 经度半球E(东经)或W(西经)
-
< 7 > 地面速率(000.0~999.9节,前面的0也将被传输)
-
< 8 > 地面航向(000.0~359.9度,以真北为参考基准,前面的0也将被传输)
-
< 9 > UTC日期,ddmmyy(日月年)格式
-
< 10 > 磁偏角(000.0~180.0度,前面的0也将被传输)
-
< 11 > 磁偏角方向,E(东)或W(西)
-
< 12 > 模式指示(仅NMEA0183 3.00版本输出, A =自主定位, D =差分, E =估算, N =数据无效)
-
我们所关心的是GPRMC这条信息,因为其中包括当前格林威治时间、经度、纬度、日期等。
$GPRMC,012724.000,A,2234.3157,N,11408.0921,E,0.00,,290108,,,A*71
$GPRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>*hh<CR><LF>
<1> UTC时间,hhmmss(时分秒)格式
<2> 定位状态,A=有效定位,V=无效定位
<3> 纬度ddmm.mmmm(度分)格式(前面的0也将被传输)
<4> 纬度半球N(北半球)或S(南半球)
<5> 经度dddmm.mmmm(度分)格式(前面的0也将被传输)
<6> 经度半球E(东经)或W(西经)
<7> 地面速率(000.0~999.9节,前面的0也将被传输)
<8> 地面航向(000.0~359.9度,以真北为参考基准,前面的0也将被传输)
<9> UTC日期,ddmmyy(日月年)格式
<10> 磁偏角(000.0~180.0度,前面的0也将被传输)
<11> 磁偏角方向,E(东)或W(西)
<12> 模式指示(仅NMEA0183 3.00版本输出,A=自主定位,D=差分,E=估算,N=数据无效)
我们所关心的是GPRMC这条信息,因为其中包括当前格林威治时间、经度、纬度、日期等。
详细GPS细节见: