Android定位详解 兼容网络定位、GPS定位
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代码
- locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,1000 * 2,50,gpsListener);
- 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定位相关推荐
- Android开发之位置定位详解与实例解析(GPS定位、Google网络定位,BaiduLBS(SDK)定位)...
在android开发中地图和定位是很多软件不可或缺的内容,这些特色功能也给人们带来了很多方便.定位一般分为三种发方案:即GPS定位.Google网络定位以及基站定位 最简单的手机定位方式当然是通过GP ...
- css 高度塌陷_HTML+CSS入门 HTML高度塌陷以及定位详解
本篇教程介绍了HTML+CSS入门 HTML高度塌陷以及定位详解,希望阅读本篇文章以后大家有所收获,帮助大家HTML+CSS入门. < 高度塌陷的含义: 父元素的高度,默认被子元素撑开,目前来讲 ...
- c语言指定变量地址,C语言中 “_at()” 特殊地址定位详解
C语言中 "_at()" 特殊地址定位详解 在keil里面,有一个特殊地址定位的指令,就是将一个变量或常量定位到一个指定的地址上面 指令为 __at ,使用方法如下 int var ...
- css中的position定位详解
css中的position定位详解 position属性指定了元素的定位类型. position属性的5个值:static,relative,fixed,absolute,sticky; 元素可以使用 ...
- 定位的坐标原点HTML,css固定定位_CSS绝对定位固定定位详解
摘要 腾兴网为您分享:CSS绝对定位固定定位详解,智学网,鱼乐贝贝,优酷,瑞易生活等软件知识,以及安卓微信多开,特效视频,微贷网app,勿忘我3dm,有为学堂,火力牛,手机知网,移动小秘书,快学堂,p ...
- 【定位原理揭秘第二期】GPS定位实现原理解析
什么是GPS定位? 我们手机上的GPS定位,是卫星定位的一种约定俗成的说法,卫星定位的全称来说应该叫做GNSS(Global Navigation Satellite System)定位.GPS只是G ...
- 室内定位:基于LoRa网络的蓝牙定位 BLE-2
①适用说明 基于LoRa网络的蓝牙定位是依赖LoRa作为数据回传网络,通过在场所内部署安装蓝牙信标设备作为定位依据,移动定位终端设备如定位胸牌或定位手表主动扫描环境中的iBeacon信号并通过LoRa ...
- 【转】Android菜单详解——理解android中的Menu--不错
原文网址:http://www.cnblogs.com/qingblog/archive/2012/06/08/2541709.html 前言 今天看了pro android 3中menu这一章,对A ...
- Android菜单详解——理解android中的Menu
前言 今天看了pro android 3中menu这一章,对Android的整个menu体系有了进一步的了解,故整理下笔记与大家分享. PS:强烈推荐<Pro Android 3>,是我至 ...
最新文章
- docker 可视化管理工具 rancher 简介
- MATLAB画高斯曲线
- 有关Location对象,及URL的解析
- Linux ps aux指令詳解--转
- 【web安全】第三弹:web攻防平台pentester安装及XSS部分答案解析
- 软件工程生命周期模型_软件生命周期模型比较| 软件工程
- 名字英文name域名_企业建站必读:六大方法锁定最佳企业域名
- 图论算法在机试实现中的一些技巧和陷阱
- R语言分类算法之随机森林(Random Forest)
- 【递归】CCF201703-3 Markdown
- 036 关于网站的UV分析
- 43.连接 Internet
- word中设置论文中英文参考文献对齐方法
- 华为HCNA之配置OSPF认证实验
- google浏览器html不提示,谷歌浏览器不显示标签页怎么回事 谷歌浏览器不显示标签页的解决方法...
- 计算机网络路由器作用是什么,路由器的作用是什么? 猫和路由器的区别分析【图文】...
- 2016-2017 ACM-ICPC CHINA-Final F. Mr. Panda and Fantastic Beasts(后缀数组的两种解法)
- 【LOJ6240】仙人掌
- c++ 双人五子棋(可直接复制)
- 银河麒麟服务器操作系统V10SP2安装搭建OpenVP
热门文章
- 积分器运放有限增益和失调影响推导
- 天津理工大学计算机学院绩点,青春之我·逐梦远航 | 听“天理代言人”李金泳讲述他眼中的计算机科学与工程学院...
- 中国集装箱均价比去年8月降低了一半以上,至加拿大航线的单程租赁费近期降幅最大 | 美通社头条...
- TextView显示文字上下有空白
- 惩戒教育也是“爱的艺术”[图]
- 渗透测试信息收集之域名信息、子域名信息、IP信息、端口信息
- windows ftp 227 Entering Passive Mode
- 够淫荡 (going down)
- 常见的字符串操作函数详解
- Java 线上惨痛踩坑记录,你也一定遇到过