Android6.0 高通上面跑

D:\AndroidStudioProjects\MyGPSTest

https://www.iteye.com/blog/gundumw100-2160728

基于android的定位无非就两种:network、gps。两者各有优劣。
GPS定位的 好处 :精确度高; 坏处 :仅能在户外使用,获取定位信息速度慢,耗费电池。 
网络定位的 好处 :户内户外都能使用,定位速度快,电量耗费低; 坏处 :精确度不太高。

定位主要是这两个方法 getBestProvider()、requestLocationUpdates();

locationManager.getBestProvider(criteria,true);方法看起来很完美,但其实返回值就network、gps二选一。而且如果你设置里面是高精度(网络与GPS),它会优先检查GPS provider 返回的是GPS;如果设置里面选择了节电(网络)provider 就返回network;如果手机开启了仅限设备(GPS)就返回GPS;如果都没开启则返回null。

其实通过bestProvider也是可以实现GPS跟网络一起定位的,只是第一次需要通过GPS定位成功了,后面没有GPS了(到室内)才会切换到网络定位。

注意requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0,networkListener)如果设置第一个参数为网络定位,第三个参数设置为0。第三个参数为位置变化最小距离:当位置距离变化超过此值时,将更新位置信息。如果位置不变定位是不更新的。

//注册监听    
 locationManager.requestLocationUpdates(provider, 60000, 0,new MyLocationListener());

举个例子:如果你在室内,gps无法定位到,你的程序将陷入死循环。当然使用requestLocationUpdates可以做到定位且不让程序陷入死循环,但是定位耗时长,甚至得不到定位。
如果使用网络定位呢,不得说这也是一个不错的选择。locationManager.requestLocationUpdates(
              LocationManager.NETWORK_PROVIDER, 0, 0,networkListener);
网络定位耗时一般在2秒左右(网络差,时间会更长),只要你接入网络,基本上都能获得定位。唯一的缺点就是精度不高。

那能不能将两者结合,这也是本文的重点。既然结合两者,就要同时为两者添加监听

Java代码

  1. locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,1000 * 2,50,gpsListener);
  2. locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0,networkListener);

这样,大概2秒我们就可以得到来自网络的定位,一分钟后得到来自GPS定位。这时用GPS定位替换网络定位就好了。当然这只是个理想的情况,现实要复杂的多。

GpsDemo.java中的代码:

package com.example.demo;
     
    import android.app.Activity;
    import android.content.Context;
    import android.location.Criteria;
    import android.location.Location;
    import android.location.LocationListener;
    import android.location.LocationManager;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Toast;
     
    public class GpsDemo extends Activity {
        
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_gpsdemo);
        }
        
        //实现GPS的方法
        public void gps(){
            //定义LocationManager对象
            LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
            
            //定义Criteria对象
            Criteria criteria = new Criteria();
            // 定位的精准度
            criteria.setAccuracy(Criteria.ACCURACY_FINE);
            // 海拔信息是否关注
            criteria.setAltitudeRequired(false);
            // 对周围的事情是否进行关心
            criteria.setBearingRequired(false);
            // 是否支持收费的查询
            criteria.setCostAllowed(true);
            // 是否耗电
            criteria.setPowerRequirement(Criteria.POWER_LOW);
            // 对速度是否关注
            criteria.setSpeedRequired(false);
            
            //得到最好的定位方式    
            String provider = locationManager.getBestProvider(criteria, true);
            
            //注册监听    
            locationManager.requestLocationUpdates(provider, 60000, 0,new MyLocationListener());

//在这里分别写GPS、网络的监听,就可以监听两个方式的定位了
        }
        
        //实现监听接口
        private final class MyLocationListener implements LocationListener {
            @Override// 位置的改变
            public void onLocationChanged(Location location) {
                // TODO Auto-generated method stub
                double latitude = location.getLatitude();// 维度
                double longitude = location.getLongitude();// 经度
                //显示当前坐标
                Toast.makeText(GpsDemo.this, "location:("+latitude+","+longitude+")", Toast.LENGTH_LONG).show();
            }
     
            @Override// gps卫星有一个没有找到
            public void onStatusChanged(String provider, int status, Bundle extras) {
                // TODO Auto-generated method stub
            }
     
            @Override// 某个设置被打开
            public void onProviderEnabled(String provider) {
                // TODO Auto-generated method stub
            }
     
            @Override// 某个设置被关闭
            public void onProviderDisabled(String provider) {
                // TODO Auto-generated method stub
            }
        
         }
        
        //按钮点击事件的方法
        public void getLocation(View view) {
            this.gps();
        }
    }

Android定位详解 兼容网络定位、GPS定位相关推荐

  1. Android开发之位置定位详解与实例解析(GPS定位、Google网络定位,BaiduLBS(SDK)定位)...

    在android开发中地图和定位是很多软件不可或缺的内容,这些特色功能也给人们带来了很多方便.定位一般分为三种发方案:即GPS定位.Google网络定位以及基站定位 最简单的手机定位方式当然是通过GP ...

  2. css 高度塌陷_HTML+CSS入门 HTML高度塌陷以及定位详解

    本篇教程介绍了HTML+CSS入门 HTML高度塌陷以及定位详解,希望阅读本篇文章以后大家有所收获,帮助大家HTML+CSS入门. < 高度塌陷的含义: 父元素的高度,默认被子元素撑开,目前来讲 ...

  3. c语言指定变量地址,C语言中 “_at()” 特殊地址定位详解

    C语言中 "_at()" 特殊地址定位详解 在keil里面,有一个特殊地址定位的指令,就是将一个变量或常量定位到一个指定的地址上面 指令为 __at ,使用方法如下 int var ...

  4. css中的position定位详解

    css中的position定位详解 position属性指定了元素的定位类型. position属性的5个值:static,relative,fixed,absolute,sticky; 元素可以使用 ...

  5. 定位的坐标原点HTML,css固定定位_CSS绝对定位固定定位详解

    摘要 腾兴网为您分享:CSS绝对定位固定定位详解,智学网,鱼乐贝贝,优酷,瑞易生活等软件知识,以及安卓微信多开,特效视频,微贷网app,勿忘我3dm,有为学堂,火力牛,手机知网,移动小秘书,快学堂,p ...

  6. 【定位原理揭秘第二期】GPS定位实现原理解析

    什么是GPS定位? 我们手机上的GPS定位,是卫星定位的一种约定俗成的说法,卫星定位的全称来说应该叫做GNSS(Global Navigation Satellite System)定位.GPS只是G ...

  7. 室内定位:基于LoRa网络的蓝牙定位 BLE-2

    ①适用说明 基于LoRa网络的蓝牙定位是依赖LoRa作为数据回传网络,通过在场所内部署安装蓝牙信标设备作为定位依据,移动定位终端设备如定位胸牌或定位手表主动扫描环境中的iBeacon信号并通过LoRa ...

  8. 【转】Android菜单详解——理解android中的Menu--不错

    原文网址:http://www.cnblogs.com/qingblog/archive/2012/06/08/2541709.html 前言 今天看了pro android 3中menu这一章,对A ...

  9. Android菜单详解——理解android中的Menu

    前言 今天看了pro android 3中menu这一章,对Android的整个menu体系有了进一步的了解,故整理下笔记与大家分享. PS:强烈推荐<Pro Android 3>,是我至 ...

最新文章

  1. docker 可视化管理工具 rancher 简介
  2. MATLAB画高斯曲线
  3. 有关Location对象,及URL的解析
  4. Linux ps aux指令詳解--转
  5. 【web安全】第三弹:web攻防平台pentester安装及XSS部分答案解析
  6. 软件工程生命周期模型_软件生命周期模型比较| 软件工程
  7. 名字英文name域名_企业建站必读:六大方法锁定最佳企业域名
  8. 图论算法在机试实现中的一些技巧和陷阱
  9. R语言分类算法之随机森林(Random Forest)
  10. 【递归】CCF201703-3 Markdown
  11. 036 关于网站的UV分析
  12. 43.连接 Internet
  13. word中设置论文中英文参考文献对齐方法
  14. 华为HCNA之配置OSPF认证实验
  15. google浏览器html不提示,谷歌浏览器不显示标签页怎么回事 谷歌浏览器不显示标签页的解决方法...
  16. 计算机网络路由器作用是什么,路由器的作用是什么? 猫和路由器的区别分析【图文】...
  17. 2016-2017 ACM-ICPC CHINA-Final F. Mr. Panda and Fantastic Beasts(后缀数组的两种解法)
  18. 【LOJ6240】仙人掌
  19. c++ 双人五子棋(可直接复制)
  20. 银河麒麟服务器操作系统V10SP2安装搭建OpenVP

热门文章

  1. 积分器运放有限增益和失调影响推导
  2. 天津理工大学计算机学院绩点,青春之我·逐梦远航 | 听“天理代言人”李金泳讲述他眼中的计算机科学与工程学院...
  3. 中国集装箱均价比去年8月降低了一半以上,至加拿大航线的单程租赁费近期降幅最大 | 美通社头条...
  4. TextView显示文字上下有空白
  5. 惩戒教育也是“爱的艺术”[图]
  6. 渗透测试信息收集之域名信息、子域名信息、IP信息、端口信息
  7. windows ftp 227 Entering Passive Mode
  8. 够淫荡 (going down)
  9. 常见的字符串操作函数详解
  10. Java 线上惨痛踩坑记录,你也一定遇到过