1、Android定位服务接口

sdk中已有一些可用的定位服务接口:

这里着重说一下GpsSatellite 接口

GpsSatellite结构

继承关系

public final class GpsSatellite extends Object

java.lang.Object

android.location.GpsSatellite

类描述

此类用于描述当前GPS卫星状态,和GpsStatus联合使用。

公共方法

public float getAzimuth ()

返回卫星的方位角,方位角范围0至360度。

返回值 卫星的方位角,浮点型数据。

public float getElevation()

返回卫星的高度角,高度角范围0至90度。

返回值 卫星的高度角,浮点型数据。

public int getPrn ()

返回伪随机噪声码,译者注:所谓伪噪声码,不是卫星编号,

是一个具有一定周期的取值0和1的离散符号串,它具有类似于白噪声的自相关函数

返回值 伪随机噪声码,整形数据

public float getSnr ()

返回卫星的信噪比。(译者注:即放大器的输出信号的电压与同时输出的噪声电压的比,

常常用分贝数表示。设备的信噪比越高表明它产生的杂音越少。一般来说,信噪比越大,

说明混在信号里的噪声越小,声音回放的音质量越高,否则相反)

返回值 卫星信噪比,浮点型数据

public boolean hasAlmanac ()

如果GPS引擎有近似轨道信息(卫星是否有年历表)则返回true

返回值 如果GPS引擎有近似轨道信息则返回true,布尔型数据

public boolean hasEphemeris ()

如果GPS引擎有卫星星历(卫星是否有星历表)则返回true(译者注:卫星星历用于描述太空飞行体位置和速度的表达式)

返回值 如果GPS引擎有卫星星历则返回true,布尔型数据

public boolean useInfix ()

当卫星被GPS引擎用于计算最近位置(卫星是否被用于近期的GPS修正计算)时,返回true

返回值 当卫星被GPS引擎用于计算最近位置时,返回true

2、LocationMananger接口应用

1、获取定位服务

mLocationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
//toast 消息出来
private void putToast(Context context, String text){Toast.makeText(context, text, Toast.LENGTH_SHORT).show();
}
//判断GPS provider是否有效否则进入设置选择provider
private void openGpsSettings(){if(mLocationManager.isProviderEnabled(android.location.LocationManager.GPS_PROVIDER)){putToast(getApplicationContext(),"GPS OK!");}else{putToast(getApplicationContext(),"GPS OFF!");Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);startActivityForResult(intent, 0);}
}

用法例如:

// 通过GPS定位
String LocateType= locationManager.GPS_PROVIDER;
Location location = locationManager.getLastKnownLocation(LocateType);
// 设置监听器,设置自动更新间隔这里设置1000ms,移动距离:0米。
locationManager.requestLocationUpdates(provider, 1000, 0, locationListener);
// 设置状态监听回调函数。statusListener是监听的回调函数。
locationManager.addGpsStatusListener(statusListener);
//另外给出 通过network定位设置
String LocateType= locationManager.NETWORK_PROVIDER;
Location location = locationManager.getLastKnownLocation(LocateType);

2、在android mainfest中添加权限

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>//精确定位
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>//粗咯定位

3、可以设置定位规则

Criteria criteria = new Criteria();
// 设置定位精确度 Criteria.ACCURACY_COARSE比较粗略,Criteria.ACCURACY_FINE则比较精细
criteria.setAccuracy(Criteria.ACCURACY_FINE);
// 设置是否要求速度
criteria.setSpeedRequired(false);
// 设置是否允许运营商收费
criteria.setCostAllowed(false);
// 设置是否需要方位信息
criteria.setBearingRequired(false);
// 设置是否需要海拔信息
criteria.setAltitudeRequired(false);
// 设置对电源的需求
criteria.setPowerRequirement(Criteria.POWER_LOW); 

用法

mProvider = mLocationManager.getBestProvider(criteria,true);
mLocation = mLocationManager.getLastKnownLocation(mProvider);

3、GpsStatus监听器

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

例如:

private final GpsStatus.Listener statusListener = new GpsStatus.Listener()
{public void onGpsStatusChanged(int event) {// GPS状态变化时的回调,获取当前状态GpsStatus status = locationManager.getGpsStatus(null);//自己编写的方法,获取卫星状态相关数据GetGPSStatus(event, status);}
};

4、获取搜索到的卫星

//定义一个List存放所搜索到的卫星信息
private List<GpsSatellite> numSatelliteList = new ArrayList<GpsSatellite>();
private String updateGpsStatus(int event,GpsStatus status){StringBuilder stringBuilder = new StringBuilder("");if(status == null){stringBuilder.append("没有捕捉到卫星!");}else if(event == GpsStatus.GPS_EVENT_FIRST_FIX){stringBuilder.append("第一次定位成功!");}else if(event == GpsStatus.GPS_EVENT_SATELLITE_STATUS){int maxSatellites = status.getMaxSatellites();Iterator<GpsSatellite> it = status.getSatellites().iterator();numSatelliteList.clear();int count = 0;//记录搜索到的实际卫星数while(it.hasNext()&& count < maxSatellites){GpsSatellite s = it.next();numSatelliteList.add(s);//将卫星信息存入队列count++;}stringBuilder.append("获得卫星总数:"+numSatelliteList.size());}else if(event == GpsStatus.GPS_EVENT_STARTED){//定位启动}else if(event == GpsStatus.GPS_EVENT_STOPPED){//定位结束}return stringBuilder.toString();
}

以上主要是通过从状态值里面status.getSatellite()获取c存放搜索到的卫星数目对象,并保存在队列中。

除了GPS状态信息,还要利用LocationListener实现对位置定位信息的监听:

5、LocationListener监听器

//弹出toast
private void putToast(Context context, String text){Toast.makeText(context, text, Toast.LENGTH_SHORT).show();
}
private final LocationListener locationListener = new LocationListener(){@Overridepublic void onLocationChanged(Location location) {//当坐标改变时调用此函数 如果provider传相同坐标 则不促发putToast(MainActivity.this,"onLocationChanged!");updateNewLocation(location);}@Overridepublic void onProviderDisabled(String provider) {//provider 被disabled 时触发 例如GPS被关闭putToast(MainActivity.this,"onProviderDisabled!");updateNewLocation(null);}@Overridepublic void onProviderEnabled(String provider) {//provider 被enable 时触发 例如GPS被打开putToast(MainActivity.this,"onProviderEnabled!");}@Overridepublic void onStatusChanged(String provider, int status, Bundle extras) {//provider 被enable 时触发 例如GPS被打开putToast(MainActivity.this,"onStatusChanged! status:"+status);//provider的状态在可用、暂时不可用和无服务三个状态直接切换时触发if (status == LocationProvider.OUT_OF_SERVICE||status == LocationProvider.TEMPORARILY_UNAVAILABLE){    }}
};

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

6、获取定位位置等信息(经纬度、卫星个数、海拔高度、定位状态、授时时间)

//location对象是从上面定位服务回调函数的参数获取。
mLatitude = location.getLatitude();      //经度
mLongitude = location.getLongitude();    //纬度
mAltitude = location.getAltitude();      //海拔
mSpeed = location.getSpeed();            //速度
mBearing = location.getBearing();        //方向

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

//temgGpsSatellite就是上面保存的搜索到的卫星
float azimuth = temgGpsSatellite.getAzimuth();    //方向角
float elevation = temgGpsSatellite.getElevation();//高度角
float snr = temgGpsSatellite.getSnr();            //信噪比

利用方位角、高度角可以绘画出一个二维位置图像,表示卫星在地球的哪个方位。而信噪比则可以表示GPS模块搜星能力的代表。

8、绘制二维卫星效果图

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

计算方法:

//根据方向角和高度角计算出,卫星显示的位置
Point point = new Point();
int x = mEarthHeartX; //左边地球圆形的圆心位置X坐标
int y = mEarthHeartY; //左边地球圆形的圆心位置Y坐标
int r = mEarthR;
x+=(int)((r*elevation*Math.sin(Math.PI*azimuth/180)/90));
y-=(int)((r*elevation*Math.cos(Math.PI*azimuth/180)/90));
point.x = x;
point.y = y;
//point就是你需要绘画卫星图的起始坐标

右边的信噪比柱状图,代表卫星的接收信号能力。信噪比的绘画,就是一个单位换算,这里就不给代码了。

9、总结

Android为我们提供了很方便的位置服务获取接口,主要通过GpsStatus、LocationManager、GpsSatellite等类来实现相关服务的监听。

GPS定位及获取卫星参数实例整理相关推荐

  1. android动态获取地理位置权限,Android6.0获取GPS定位和获取位置权限和位置信息的方法...

    1.添加权限--6.0之后要动态获取,下面会说 2.直接上代码,不多说,代码中注释很详细. private static final int BAIDU_READ_PHONE_STATE = 100; ...

  2. java编程手机gps定位_GPS 获取Gps定位信息的Android源码实例,通过这个JAVA 目,你可能学会GPS在 手机 238万源代码下载- www.pudn.com...

    文件名称: GPS下载 收藏√  [ 5  4  3  2  1 ] 开发工具: Java 文件大小: 59 KB 上传时间: 2013-04-08 下载次数: 22 详细说明:获取Gps定位信息的A ...

  3. Android APP - GPS定位并获取地理位置

    1. 相关知识简介 通过LocationManagerService可以获取位置,这个service的aidl文件在frameworks/base/location/java/android/loca ...

  4. android gps定位完整代码,android GPS定位 (完整代码实例)

    [实例简介] android平台上完成GPS定位功能,完整代码实例,多次测试. [实例截图] [核心代码] GPStest └── GPStest ├── AndroidManifest.xml ├─ ...

  5. go语言学习---使用os.Args获取简单参数(命令行解析)

    实例1: //main package mainimport ("fmt""os" )func main() {fmt.Println(os.Args)} 执行 ...

  6. 基于STM32单片机智能手表GSM短信GPS定位设计(毕业设计资料)

    本设计由STM32单片机+LCD1602液晶显示电路+GPS模块+GSM模块+按键电路+LED灯电路+电源电路组成.  1.液晶1602显示时钟,带日期,且可以显示经纬度信息,两个信息通过一个按键切换 ...

  7. GPS定位详解——涉及GPS版本变化、定位获取失败等常见问题。

    GPS详解 GPS本身并不复杂,但是因为GPS本身定位比网络还慢的原因用好GPS还是需要费点事的. GPS详解 1. GPS相关类说明(android.location包) 1.1. 主要必须涉及到的 ...

  8. 高德定位SDK踩坑-高精度模式下获取不到GPS定位(无网络环境)

    高德定位SDK踩坑-高精度模式下获取不到GPS定位(无网络环境) 关键字:定位模式 高精度模式 GPS定位 无网络 一句话描述问题:高精度模式在断网环境下不可靠.有几率重复报错或使用缓存定位,不使用G ...

  9. Android GPS定位及实例

    使用GPS 定位,首先,需要在清单文件(AndroidManifest.xml)中注册获取定位的权限: 1.获取位置管理器对象LocationManager import android.locati ...

最新文章

  1. LeetCode 458. Poor Pigs--智力题「小白鼠试毒」--C++,Python解法
  2. 编程问题之:x=xamp;(x-1)
  3. Word中快速插入目录
  4. Leetcode-一篇帖子就够啦
  5. windows SOCKET编程
  6. php hex2bin nodejs,Nodejs Serialport文档翻译
  7. python 零代码快速开发平台_现在低代码开发平台和零代码平台区别是什么?
  8. 不会演讲的你,一开口就输了
  9. 阿里AI界的新伙伴,1秒钟自动生成20000条文案
  10. c不是面向对象编程语言 所以不具有面对,go 学习笔记之go是不是面向对象语言是否支持面对对象编程?...
  11. 二十六岁,裸辞之后,我步入了“三无”行列
  12. 多进程/多线程的比较
  13. qt 字体 qss加载字体_字体加载技术
  14. Mysql数据库repair table 修复表
  15. 操作系统调度算法理解
  16. mybatis plus table doesn't exists
  17. 转x电容和y电容的区别
  18. 基于EMC的共模干扰与差模干扰以及抑制方法
  19. safari浏览网页时显示“不安全网站”怎么办?
  20. 安卓开机画面_为了安卓系统,入手文石BOOX Poke Pro电子书阅读器

热门文章

  1. 百度地图 地理位置 转 经纬度 计算两点间的距离
  2. 职业教育/培训研究报告(精选七篇)
  3. 树莓派+USB摄像头自制网络摄像头
  4. 注意力机制:认知模型与计算机应用
  5. 条件渲染之react高阶组件——HOC
  6. 初次联系导师短信模板_上海大学考研复试:如何联系导师
  7. 绘图软件origin8.5使用总结
  8. Linux十大桌面环境
  9. Lesson14 Redis集群的搭建
  10. 求给定范围内的所有质数