Android入门之GPS定位详解
一、LocationManager
LocationMangager,位置管理器。要想操作定位相关设备,必须先定义个LocationManager。
- LocationManger locationManager=(LocationManager)this.getSystemService(Context.LOCATION_SERVICE);
二、LocationListener
LocationListener,位置监听,监听位置变化,监听设备开关与状态。
- //定义
- LocationListener locationListener=new LocationListener(){
- //位置信息变化时触发
- public void onLocationChanged(Location location) {
- system.out.println("时间:"+location.getTime());
- system.out.println("经度:"+location.getLongitude());
- system.out.println("纬度:"+location.getLatitude());
- system.out.println("海拔:"+location.getAltitude());
- }
- //gps禁用时触发
- public void onProviderDisabled(String provider) {
- system.out.println("当前GPS状态:禁用\n");
- }
- //gps开启时触发
- public void onProviderEnabled(String provider) {
- system.out.println("当前GPS状态:开启\n");
- }
- //gps状态变化时触发
- public void onStatusChanged(String provider, int status,Bundle extras) {
- if(status==LocationProvider.AVAILABLE){
- system.out.println("当前GPS状态:可见的\n");
- }else if(status==LocationProvider.OUT_OF_SERVICE){
- system.out.println("当前GPS状态:服务区外\n");
- }else if(status==LocationProvider.TEMPORARILY_UNAVAILABLE){
- system.out.println("当前GPS状态:暂停服务\n");
- }
- }
- };
- //绑定监听,有4个参数
- //参数1,设备:有GPS_PROVIDER和NETWORK_PROVIDER两种,我们选用GPS,网络在此不做讨论
- //参数2,位置信息更新周期:
- //参数3,位置变化最小距离:当位置距离变化超过此值时,将更新位置信息
- //参数4,监听
- //备注:参数2和3,如果参数3不为0,则以参数3为准;参数3为0,则通过时间来定时更新;两者为0,则随时刷新
- locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 0, locationListener);
三、Location
Location,位置信息,通过Location可以获取时间、经纬度、海拔等位置信息。上面采用locationListener里面的onLocationChanged()来获取location,下面讲述如何主动获取location。
- Location location=locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
- system.out.println("时间:"+location.getTime());
- system.out.println("经度:"+location.getLongitude());
注意:Location location=new Location(LocationManager.GPS_PROVIDER)方式获取的location的各个参数值都是为0。
四、GpsStatus.Listener
GpsStatus.Listener ,GPS状态监听,包括GPS启动、停止、第一次定位、卫星变化等事件。
- //定义
- GpsStatus.Listener gpsStatusListener=new GpsStatus.Listener(){
- public void onGpsStatusChanged(int event) {
- if(event==GpsStatus.GPS_EVENT_FIRST_FIX){
- //第一次定位
- }else if(event==GpsStatus.GPS_EVENT_SATELLITE_STATUS){
- //卫星状态改变
- GpsStatus gpsStauts= locationManager.getGpsStatus(null); // 取当前状态
- int maxSatellites = gpsStauts.getMaxSatellites(); //获取卫星颗数的默认最大值
- Iterator<GpsSatellite> it = gpsStatus.getSatellites().iterator();//创建一个迭代器保存所有卫星
- int count = 0;
- while (it.hasNext() && count <= maxSatellites) {
- count++;
- GpsStatellite s = it.next();
- }
- system.out.println("搜索到:"+count+"颗卫星");
- }else if(event==GpsStatus.GPS_EVENT_STARTED){
- //定位启动
- }else if(event==GpsStatus.GPS_EVENT_STOPPED){
- //定位结束
- }
- }
- };
- //绑定
- locationManager.addGpsStatusListener(gpsStatusListener);
五、GpsStatus
GpsStatus,GPS状态信息,上面在卫星状态变化时,我们就用到了GpsStatus。
- //实例化
- GpsStatus gpsStatus = locationManager.getGpsStatus(null); // 取当前状态
- //获取默认最大卫星数
- int maxSatellites = gpsStatus.getMaxSatellites();
- //获取第一次定位时间(启动到第一次定位)
- int costTime=gpsStatus.getTimeToFirstFix();
- //获取卫星
- Iterable<GpsSatellite> iterable=gpsStatus.getSatellites();
- //一般再次转换成Iterator
- Iterator<GpsSatellite> itrator=iterable.iterator();
六、GpsSatellite
GpsSatellite,定位卫星,包含卫星的方位、高度、伪随机噪声码、信噪比等信息。
- //获取卫星
- Iterable<GpsSatellite> iterable=gpsStatus.getSatellites();
- //再次转换成Iterator
- Iterator<GpsSatellite> itrator=iterable.iterator();
- //通过遍历重新整理为ArrayList
- ArrayList<GpsSatellite> satelliteList=new ArrayList<GpsSatellite>();
- int count=0;
- int maxSatellites=gpsStatus.getMaxSatellites();
- while (itrator.hasNext() && count <= maxSatellites) {
- count++;
- satellite = itrator.next();
- statelliteList.add(satellite);
- }
- System.out.println("总共搜索到"+count+"颗卫星");
- //输出卫星信息
- for(int i=0;i<satelliteList.size();i++){
- //卫星的方位角,浮点型数据
- System.out.println(satelliteList.get(i).getAzimuth());
- //卫星的高度,浮点型数据
- System.out.println(satelliteList.get(i).getElevation());
- //卫星的伪随机噪声码,整形数据
- System.out.println(satelliteList.get(i).getPrn());
- //卫星的信噪比,浮点型数据
- System.out.println(satelliteList.get(i).getSnr());
- //卫星是否有年历表,布尔型数据
- System.out.println(satelliteList.get(i).hasAlmanac());
- //卫星是否有星历表,布尔型数据
- System.out.println(satelliteList.get(i).hasEphemeris());
- //卫星是否被用于近期的GPS修正计算
- System.out.println(satelliteList.get(i).hasAlmanac());
- }
Android入门之GPS定位详解的更多相关文章
- Android开发之位置定位详解与实例解析(GPS定位、Google网络定位,BaiduLBS(SDK)定位)
在android开发中地图和定位是很多软件不可或缺的内容,这些特色功能也给人们带来了很多方便.定位一般分为三种发方案:即GPS定位.Google网络定位以及基站定位 最简单的手机定位方式当然是通过GP ...
- Android之GPS定位详解
一.LocationManager LocationMangager,位置管理器.要想操作定位相关设备,必须先定义个LocationManager.我们可以通过如下代码创建LocationManger ...
- Android高效率编码-第三方SDK详解系列(一)——百度地图,绘制,覆盖物,导航,定位,细腻分解!
Android高效率编码-第三方SDK详解系列(一)--百度地图,绘制,覆盖物,导航,定位,细腻分解! 这是一个系列,但是我也不确定具体会更新多少期,最近很忙,主要还是效率的问题,所以一些有效的东西还 ...
- 小甲鱼PE详解之基址重定位详解(PE详解10)
今天有一个朋友发短消息问我说“老师,为什么PE的格式要讲的这么这么细,这可不是一般的系哦”.其实之所以将PE结构放在解密系列继基础篇之后讲并且尽可能细致的讲,不是因为小甲鱼没事找事做,主要原因是因为P ...
- Android高效率编码-第三方SDK详解系列(二)——Bmob后端云开发,实现登录注册,更改资料,修改密码,邮箱验证,上传,下载,推送消息,缩略图加载等功能
Android高效率编码-第三方SDK详解系列(二)--Bmob后端云开发,实现登录注册,更改资料,修改密码,邮箱验证,上传,下载,推送消息,缩略图加载等功能 我的本意是第二篇写Mob的shareSD ...
- Drawable实战解析:Android XML shape 标签使用详解(apk瘦身,减少内存好帮手)
Android XML shape 标签使用详解 一个android开发者肯定懂得使用 xml 定义一个 Drawable,比如定义一个 rect 或者 circle 作为一个 View 的背景. ...
- Android图片缓存之Bitmap详解
前言: 最近准备研究一下图片缓存框架,基于这个想法觉得还是先了解有关图片缓存的基础知识,今天重点学习一下Bitmap.BitmapFactory这两个类. 图片缓存相关博客地址: Android图片缓 ...
- Android Design Support Library使用详解
Android Design Support Library使用详解 Google在2015的IO大会上,给我们带来了更加详细的Material Design设计规范,同时,也给我们带来了全新的And ...
- Android 之窗口小部件详解--App Widget
Android 之窗口小部件详解--App Widget 版本号 说明 作者 日期 1.0 添加App Widge介绍和示例 Sky Wang 2013/06/27 1 App ...
随机推荐
- React Native 开发之 (04) 例子讲解
一.了解index.ios.js React-Native就是在开发效率和用户体验间做的一种权衡.React-native是使用JS开发,开发效率高.发布能力强,不仅拥有hybrid的开发效率,同时拥 ...
- iOS开发-二维码
二维码 从ios7开始集成了二维码的生成和读取功能 此前被广泛使用的zbarsdk目前不支持64位处理器 生成二维码的步骤: 倒入CoreImage框架 通过滤镜CIFilter生成二维码 二维码的内 ...
- 【原】js离开页面执行函数 onbeforeunload与onunload事件
在最近的项目中,需要做到一个时间,就是用户离开页面的时候,我需要缓存页面其中一部分的内容,但是我不需要用户刷新的时候也缓存,我只希望在我用户离开的时候 执行这个函数.百度之,有onbeforeunlo ...
- 20145212 《Java程序设计》第3周学习总结
20145212 <Java程序设计>第3周学习总结 教材学习内容总结 教材第四章知识点总结 面向对象和面向过程: 面向对象是相对面向过程而言的,面向过程强调的是功能行为,面向对象是将过程 ...
- xhprof安装使用
安装: 到pecl官网下载xhprof的最新版:http://pecl.php.net/package/xhprof wget http://pecl.php.net/get/xhprof-0.9.4 ...
- Only one statement is allowed per batch. A batch separator, such as 'GO', might be required between statements.
When I added the file in VS I forgot to set Build Action = None from the file properties.
- 从Microsoft.AspNet.Identity看微软推荐的一种MVC的分层架构
Microsoft.AspNet.Identity简介 Microsoft.AspNet.Identity是微软在MVC 5.0中新引入的一种membership框架,和之前ASP.NET传统的mem ...
- Python之with语句
Python之with语句 在Python中,我们在打开文件的时候,为了代码的健壮性,通常要考虑一些异常情况,比如: try: ccfile = open('/path/data') content ...
- Hadoop快速入门
目的 这篇文档的目的是帮助你快速完成单机上的Hadoop安装与使用以便你对Hadoop分布式文件系统(HDFS)和Map-Reduce框架有所体会,比如在HDFS上运行示例程序或简单作业等. 先决条件 ...
- Storm:最火的流式处理框架
伴随着信息科技日新月异的发展,信息呈现出爆发式的膨胀,人们获取信息的途径也更加多样.更加便捷,同时对于信息的时效性要求也越来越高.举个搜索场景中的例子,当一个卖家发布了一条宝贝信息时,他希望的当然是这 ...