Android GPS 取经纬度
// 获取位置管理服务
private LocationManager locationManager;
3 String mProviderName = "";
 private void onCreate(){
       locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
 }
3.在onStart()
@Override
public void onStart() {
super.onStart();
if (getIntent() == null || getIntent().getStringExtra("city") == null
|| "".equals(getIntent().getStringExtra("city"))) {
if (openGPSSettings()) {
Location lastKnownLocation = null;
lastKnownLocation = locationManager
.getLastKnownLocation(LocationManager.GPS_PROVIDER);
mProviderName = LocationManager.GPS_PROVIDER;
if (lastKnownLocation == null) {
lastKnownLocation = locationManager
.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
mProviderName = LocationManager.NETWORK_PROVIDER;
}
if (mProviderName != null && !"".equals(mProviderName)) {
locationManager.requestLocationUpdates(mProviderName, 1000,
1, locationListener);
}
}
}
}
判断是否开启GPS:
/** GPS模块是否存在或者是开启 **/
private boolean openGPSSettings() {
LocationManager alm = (LocationManager) this
.getSystemService(Context.LOCATION_SERVICE);
if (alm.isProviderEnabled(android.location.LocationManager.GPS_PROVIDER)) {
Toast.makeText(this, "GPS模块正常", Toast.LENGTH_SHORT).show();
return true;
} Toast.makeText(this, "请开启GPS!", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(Settings.ACTION_SECURITY_SETTINGS);
startActivityForResult(intent, 0); // 此为设置完成后返回到获取界面
return false;
}
在onPause、onResume中处理locationManager
/**
* 这里一定要对LocationManager进行重新设置监听 mgr获取provider的过程不是一次就能成功的
* mgr.getLastKnownLocation很可能返回null 如果只在initProvider()中注册一次监听则基本很难成功
*/
@Override
public void onResume() {
super.onResume();
if (locationManager != null && !Utils.isEmpty(mProviderName)) {
locationManager.requestLocationUpdates(mProviderName, 1000, 1,
locationListener);
}
} @Override
public void onPause() {
super.onPause();
// 取消注册监听
if (locationManager != null) {
locationManager.removeUpdates(locationListener);
}
}
监听位置变化:
 private LocationListener locationListener = new LocationListener() {
         /**
          * 位置信息变化时触发
          */
         public void onLocationChanged(Location location) {
             updateToNewLocation(location);
         }
         /**
          * GPS状态变化时触发
          */
         public void onStatusChanged(String provider, int status, Bundle extras) {
             switch (status) {
             // GPS状态为可见时
             case LocationProvider.AVAILABLE:
                 // 当前GPS状态为可见状态
                 break;
             // GPS状态为服务区外时
             case LocationProvider.OUT_OF_SERVICE:
                 // 当前GPS状态为服务区外状态
                 break;
             // GPS状态为暂停服务时
             case LocationProvider.TEMPORARILY_UNAVAILABLE:
                 // 当前GPS状态为暂停服务状态
                 break;
             }
         }
         /**
          * GPS开启时触发
          */
         public void onProviderEnabled(String provider) {
             Location location = locationManager.getLastKnownLocation(provider);
             updateToNewLocation(location);
         }
         /**
          * GPS禁用时触发
          */
         public void onProviderDisabled(String provider) {
             updateToNewLocation(null);
         }
     };
/** 服务管理对象的监听器 */
		// 绑定监听,有4个参数
		// 参数1,设备:有GPS_PROVIDER和NETWORK_PROVIDER两种
		// 参数2,位置信息更新周期,单位毫秒
		// 参数3,位置变化最小距离:当位置距离变化超过此值时,将更新位置信息
		// 参数4,监听
		// 备注:参数2和3,如果参数3不为0,则以参数3为准;参数3为0,则通过时间来定时更新;两者为0,则随时刷新
// 1秒更新一次,或最小位移变化超过1米更新一次;
		// 注意:此处更新准确度非常低,推荐在service里面启动一个Thread,在run中sleep(10000);然后执行handler.sendMessage(),更新位置
		// 设置监听器,自动更新的最小时间为间隔N秒(1秒为1*1000,这样写主要为了方便)或最小位移变化超过N米
处理经纬度信息,可以请求baidu获取详细地址信息。
 public void updateToNewLocation(final Location location) {
         if (location == null) {
             Toast.makeText(getApplicationContext(), "GPS定位失败",
                     Toast.LENGTH_SHORT).show();
             return;
         }
         Log.i("", "经度:" + location.getLongitude());
         Log.i("", "纬度:" + location.getLatitude());  }
开始启动监听位置变化时,可设置:
String serviceName = Context.LOCATION_SERVICE;
locationManager = (LocationManager) this.getSystemService(serviceName);
// 查找到服务信息
Criteria criteria = new Criteria();
// 设置定位精确度 Criteria.ACCURACY_COARSE比较粗略,Criteria.ACCURACY_FINE则比较精细
criteria.setAccuracy(Criteria.ACCURACY_FINE);
// 设置是否要求速度
criteria.setSpeedRequired(false);
// 设置是否需要海拔信息
criteria.setAltitudeRequired(false);
// 设置是否需要方位信息
criteria.setBearingRequired(false);
// 设置是否允许运营商收费
criteria.setCostAllowed(true);
// 设置对电源的需求
criteria.setPowerRequirement(Criteria.POWER_LOW); // 低功耗 // 为获取地理位置信息时设置查询条件
String provider = locationManager.getBestProvider(criteria, true); // 获取GPS信息
//如果不设置查询要求,getLastKnownLocation方法传人的参数为LocationManager.GPS_PROVIDER
Location location = locationManager.getLastKnownLocation(provider);
// 通过GPS获取位置
updateToNewLocation(location);
Android GPS 取经纬度的更多相关文章
- Android GPS应用开发
		转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/5715879.html GPS定位系统由三部分组成,即由GPS卫星组成的空间部分,若干地面组成的控制部分和普通 ... 
- android gps开发必备资料(含测试demo下载)
		入门资料参考: How accurate is Android GPS? Part 1: Understanding Location Data How accurate is Android GPS ... 
- 彻底解决Android GPS没法定位这一顽固问题
		大家去网上搜索Android定位location为null没法定位问题.预计有一大堆文章介绍怎样来解决.可是最后大家发现基本没用. 本文将从Android定位实现原理来深入分析没法定位原因并提出真正的 ... 
- android  GPS定位源码  地图显示位置源码 有用到的小伙伴自提取
		package com.jasgroup.cn.amhdeam; import java.io.IOException; import java.util.Iterator; import andro ... 
- android gps定位LocationManager
		android location provider有: * LocationManager.GPS_PROVIDER:GPS,精度比较高,但是慢而且消耗电力,而且可能因为天气原因或者障碍物而无法获取卫 ... 
- Android GPS应用:动态获取位置信息
		在上文中,介绍了GPS概念及Android开发GPS应用涉及到的常用类和方法.在本文中,开发一个小应用,实时获取定位信息,包括用户所在的纬度.经度.高度.方向.移动速度等.代码如下: Activity ... 
- Android GPS获取当前经纬度坐标
		APP中可能会遇到一种需求,就是将当前所在位置的坐标传到server上,今天我提供三种途径去获取经纬度坐标信息,第一种是通过Android API来实现,另外一种通过百度地图API来实现,第三种通过天 ... 
- Android GPS定位测试(附效果图)
		今天因为工作需要,把以前编写的一个GPS测试程序拿出来重新修改了一下.这个程序说起来有些历史了,是我11年编写的,那时候学了Android开发没多久,算是一个实验性的作品.现在工作需要,重新拿出来修整 ... 
- Android GPS定位测试(附效果图)
		今天因为工作需要,把以前编写的一个GPS测试程序拿出来重新修改了一下.这个程序说起来有些历史了,是我11年编写的,那时候学了Android开发没多久,算是一个实验性的作品.现在工作需要,重新拿出来修整 ... 
随机推荐
- CLR via C#(11)-无参属性、有参数属性(索引器)
			一. 无参属性 1. 定义属性 无参属性就是我们最常见的属性方式,在赋值时可以加入一定的逻辑判断.属性的定义其实不复杂,先看个直观的例子: 说明: 属性要定义名称和类型,且类型不能是void. 属性是 ... 
- 如何使用Case进行简单判断
			Case具有两种格式.简单Case函数和Case搜索函数. --简单Case函数 CASE sex ' THEN '男' ' THEN '女' ELSE '其他' END --Case搜索函数 ' T ... 
- [LeetCode] Pow(x, n)
			Implement pow(x, n). 有史以来做过最简单的一题,大概用5分钟ac,我采用fast exponential,这个在sicp的第一章就有描述.思想是:如果n是偶数的话,那么m^n = ... 
- [Linux][VMWare] 学习笔记之安装Linux系统-网络配置
			最近开始折腾Linux,在本机装了个VMWare和Centos,装完之后虚拟机里面的OS可以上网,但是使用SecureCRT连接不上虚拟机,开始折腾这个网络. vmware安装好以后,会自动添加两张网 ... 
- error MSB6006: “cmd.exe”已退出,代码为 3。
			VS2012 Qt项目生成提示以下错误: 原因是 generated files 的 debug或release文件夹下的文件不存在. 解决方法:QT5 –>convert project ... 
- Request和Response对象
			Request 和 Response 对象起到了服务器与客户机之间的信息传递作用.Request 对象用于接收客户端浏览器提交的数据,而 Response 对象的功能则是将服务器端的数据发送到客户端浏 ... 
- 汇编学习(三)——汇编语言程序入门
			一.寻址方式 1.概念: 一条指令由操作码和操作数构成,操作码是系统定义好的符号,执行指定的操作,操作数即是指令的对象,而寻址方式就是操作数的指定方式 操作码 目的操作数,源操作数 2.寻址方式的三种 ... 
- Oracle注入漏洞
			sqlmap.py -u "http://10.7.82.123:9104/servlet/json" --cookie="JSESSIONID=abcgk26KDf_5 ... 
- js 判断数组的值是否有重复
			方法一: var s = ary.join(",")+","; for(var i=0;i<ary.length;i++) { if(s.replace( ... 
- AngularJS学习之全局API(应用程序编程接口)
			1.AngularJS全局API用于执行常见任务的Javascript函数集合: **比较对象 **迭代对象 **转换对象 2.全局API函数使用angularJS对象进行访问:以下是通用API函数: ... 
