文档章节

Android开发进阶(三)--初探Android平台上的定位服务(GPS)

程序袁_绪龙
 程序袁_绪龙
发布于 2015/01/07 09:14
字数 1206
阅读 475
收藏 0


初探Android平台上的定位服务(GPS)

 

特别声明:以下所有操作都别忘记了加上权限:

[html]   view plain copy print ?
  1. <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />  
  2.   
  3.  <uses-permission android:name="android.permission.INTERNET" />  
  4.   
  5.  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />  
  6.   
  7. sp;  

LocationManager

通过LocationManager可以实现设备的定位、跟踪和趋近提示。它不需要你直接来实例化,我们可以通过Context.getSystemService(Context.LOCATION_SERVICE). 来获得LocationManager实例。

常用属性和方法

属性和方法

描述

GPS_PROVIDER

静态字符串常量,表明LocationProvider是GPS

NETWORK_PROVIDER

静态字符串常量,表明LocationProvider是网络

addGpsStatusListener(GpsStatus.Listener listener)

添加一个GPS状态监听器

addProximityAlert(double latitude, double longitude, float radius, long expiration, PendingIntent intent)

添加一个趋近警告

getAllProviders()

获得所有的LocationProvider列表

getBestProvider(Criteria criteria, boolean enabledOnly)

根据Criteria返回最适合的LocationProvider

getLastKnownLocation(String provider)

根据Provider获得位置信息

getProvider(String name)

获得指定名称的LocationProvider

getProvider(boolean enableOnly)

获得可利用的LocationProvider列表

removeProximityAlert(PendingIntent intent)

删除趋近警告

requestLocationUpdates(String provider, long minTime, float minDistance, PendingIntent intent)

通过给定的Provider名称,周期性地通知当前Activity

requestLocationUpdates(String provider, long minTime, float minDistance, LocationListener listener)

通过给定的Provider名称,并将其绑定指定的LocationListener监听器

 

 

 

LocationProvider

LocationProvider用来描述位置提供者,设置位置提供者的一些属性。可以通过Criteria类来为LocationProvider设置条件,获得合适的LocationProvider。

属性或者方法名称

描述

AVAILABLE

静态整型常量,标示是否可利用

OUT_OF_SERVICE

静态整型常量,不在服务区

TEMPORAILY_UNAVAILABLE

静态整型常量,临时不可利用

getAccuarcy()

获得精度

getName()

获得名称

getPowerRequirement()

获得电源需求

hasMonetaryCost()

花钱的还是免费的

requiresCell()

是否需要访问基站网络

requiresNetWork()

是否需要Intent网络数据

requiresSatelite()

是否需要访问卫星

supportsAltitude()

是否能够提供高度信息

supportsBearing()

是否能够提供方向信息

supportsSpeed()

是否能够提供速度信息

实例:获取设备上的所有的LocationProviders

[java]   view plain copy print ?
  1. locationManager=(LocationManager)LocationManagerDemoActivity.this.getSystemService(Context.LOCATION_SERVICE);  
  2.   
  3.                 
  4.   
  5.               //获取所有的LocationProvider  
  6.   
  7.               List<String> allproviders=locationManager.getAllProviders();  
  8.   
  9.               for (String string : allproviders) {  
  10.   
  11.                   System.out.println(string);  
  12.   
  13.               }  

 

Location类

它用于描述当前设备的地理位置信息,包括了经纬度、方向、高度和速度等。可以通过LocationManager.getLastKnownLocation(String provider)方法可以获得Location实例

其常见方法和属性:

方法

描述

public float getAccuracy ()

获得精确度

public double getAltitude ()

获得高度

public float getBearing ()

获得方向

public double getLatitude ()

获取经度

public double getLongitude ()

获得纬度

public float getSpeed ()

获得速度

实例:得到你自己的位置

[java]   view plain copy print ?
  1. // 获取自己的位置  
  2.   
  3.    btnGetPosition.setOnClickListener(new View.OnClickListener() {  
  4.   
  5.        @Override  
  6.   
  7.        public void onClick(View v) {  
  8.   
  9.           System.out.println("获取当前位置");  
  10.   
  11.           locationManager = (LocationManager) LocationManagerDemoActivity.this  
  12.   
  13.                  .getSystemService(Context.LOCATION_SERVICE);  
  14.   
  15.   
  16.   
  17.      
  18.   
  19.   
  20.   
  21.           Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);  
  22.   
  23.           System.out.println("你当前的位置:");  
  24.   
  25.           StringBuilder sb=new StringBuilder("你当前的位置(经纬度):");  
  26.   
  27.           sb.append("(");  
  28.   
  29.           sb.append(location.getLatitude());  
  30.   
  31.           sb.append(",");  
  32.   
  33.           sb.append(location.getLongitude());  
  34.   
  35.           sb.append(")");  
  36.   
  37.           System.out.println(location.getLatitude());  
  38.   
  39.           System.out.println(location.getLongitude());  
  40.   
  41.           txtPostion.setText(sb);  
  42.   
  43.        }  
  44.   
  45.    });  

 

实例:追踪位置:

requestLocationUpdates(String provider,long minTime,float minDistance,LocationListener listener)

关于参数minTime,minDistance的说明是指当用户位置改变多少纬度时候多长时间更新下这个用户的位置

    

[java]   view plain copy print ?
  1. locationManager.requestLocationUpdates(  
  2.   
  3.                   LocationManager.GPS_PROVIDER, 500500new listener());  

实例:获取最好的LocationProivider

[java]   view plain copy print ?
  1. LocationManager.getBasetProvider(Criteria criteria,boolean is)  

Criteria类

它封装了用于获得LocationProvider的条件,可以根据指定的Criteria条件来过滤获得LocationProvider

及常用属性和方法如下:

属性或访求名称

描述

ACCERACY_COARSE

粗糙精确度

ACCURACY_FINE

较高精确度

POWER_HING

用电高

POWER_LOW

用电低

isAlititudeRequried()

返回Provider是否需要高度信息

isBearingRequired()

返回Provider是否需要方位信息

isSpeedRequried()

返回Provider是否需要速度信息

isCostAllowed()

是否允许产生费用

setAccuracy(int accuracy)

设置Provider的精确度

setAltitudeRequired (boolean altitudeRequired)

设置Provider是否需要高度信息

setBearingRequired (boolean bearingRequired)

设置Provider是否需要方位信息

setCostAllowed (boolean costAllowed)

设置Provider是否产生费用

setSpeedAccuracy (int accuracy)

设置Provider是否需要速度信息

getAccuracy()

获得精度

[java]   view plain copy print ?
  1. // 获取最佳的Provider  
  2.   
  3.    btnBestProvider.setOnClickListener(new View.OnClickListener() {  
  4.   
  5.        @Override  
  6.   
  7.        public void onClick(View v) {  
  8.   
  9.           String bestProviders = "";  
  10.   
  11.           locationManager = (LocationManager) LocationManagerDemoActivity.this  
  12.   
  13.                  .getSystemService(Context.LOCATION_SERVICE);  
  14.   
  15.           // 新建一个Criteria  
  16.   
  17.           Criteria criteria = new Criteria();  
  18.   
  19.           // 设置精确度  
  20.   
  21.           criteria.setAccuracy(Criteria.ACCURACY_COARSE);  
  22.   
  23.           criteria.setPowerRequirement(Criteria.POWER_LOW);  
  24.   
  25.           criteria.setAltitudeRequired(false);  
  26.   
  27.           criteria.setBearingRequired(false);  
  28.   
  29.           criteria.setSpeedRequired(false);  
  30.   
  31.           criteria.setCostAllowed(false);  
  32.   
  33.           // 获得符合条件的provider  
  34.   
  35.           bestProviders = locationManager  
  36.   
  37.                  .getBestProvider(criteria, false);  
  38.   
  39.           txtCrerita.setText("最佳的provider:"+bestProviders);  
  40.   
  41.             
  42.   
  43.        }  
  44.   
  45.    });  

总结(再看GPS):

从以上知识我们可以知道,要想使用Android平台下的GPS服务我们就得用LocationManager这个系统服务,我们可以通过Context.getSystemService(Context.LOCATION_SERVIER)来得到这个LocationManager对象实例,有了这么一个服务后,我们可以通过LocationProvider来描述位置提供者,为了某种需要我们又用到了一个Criteria类来设置满足我们自己的最佳要求,那么这一切都搞定的时候,获取我们自己所在的位置我们就用到了Location类,这个类用来获取我们自己的位置,例如:经纬度。

 

本文转载自:http://blog.csdn.net/worker90/article/details/6955108

程序袁_绪龙
粉丝 106
博文 242
码字总数 66750
作品 0
普陀
程序员
私信 提问
Android 手机定位慢的解决方法

做移动互联网就不太可能不碰手机端的开发。上周为了项目需要,俺也挽袖子抡胳膊开始写起了Android程序,还好有java基础,倒也上手快,写了几个小程序,主要都是关于定位方面的。 网上也搜得到...

鉴客
2011/07/18
26.1K
12
Android 平台上编程实现 GPS 定位

在几个月前,开发式手机联盟推出自己的Android手机雏形时,受到了极大的追捧。但是到现在还没有真机在市场上销售,Google为了鼓励开发 人员来开发Android手机的应用程序,提供了1千万美金来奖...

红薯
2009/06/18
13.2K
4
Android之GPS定位详解

一、LocationManager LocationMangager,位置管理器。要想操作定位相关设备,必须先定义个LocationManager。我们可以通过如下代码创建LocationManger对象。 LocationManger locationManager...

程序袁_绪龙
2014/09/28
389
0
请教安卓开发关于地理位置定位问题

你好我想请教您一些关于安卓开发的问题;最近我的团队在做安卓手机开发,采用了phonegap的框架进行开发,由于我不太了解安卓开发的相关知识,安卓开发是有我们团队的 其他人伙伴在负责,但是...

zhuxiangdong
2012/04/20
1K
4
Android 百度地图开发之MyLocationOverlay,PopupOverlay的使用

这一篇文章主要讲解的是百度地图的定位功能,然后还有MyLocationOverlay和PopupOverlay两个地图覆盖物的使用,Overlay是“图层”或“覆盖物”的意思,MyLocationOverlay从名字上面理解就是我...

等待流星
2013/12/10
2.1K
0

没有更多内容

加载失败,请刷新页面

加载更多

JAVA 编写redisUtils工具类,防止高并发获取缓存出现并发问题

import lombok.extern.slf4j.Slf4j;import org.springframework.data.redis.core.BoundHashOperations;import org.springframework.data.redis.core.BoundValueOperations;import org.......

huangkejie
38分钟前
5
0
JMM内存模型(一)&volatile关键字的可见性

在说这个之前,我想先说一下计算机的内存模型: CPU在执行的时候,肯定要有数据,而数据在内存中放着呢,这里的内存就是计算机的物理内存,刚开始还好,但是随着技术的发展,CPU处理的速度越...

走向人生巅峰的大路
55分钟前
95
0
你对AJAX认知有多少(2)?

接着昨日内容,我们几天继续探讨ajax的相关知识点 提到ajax下面几个问题又是必须要了解的啦~~~ 8、在浏览器端如何得到服务器端响应的XML数据。 通过XMLHttpRequest对象的responseXMl属性 9、 ...

理性思考
今天
5
0
正则表达式基础(一)

1.转义 转义的作用: 当某个字符在表达式中具有特殊含义,例如字符串引号中出现了引号,为了可以使用这些字符本身,而不是使用其在表达式中的特殊含义,则需要通过转义符“\”来构建该字符转...

清自以敬
今天
4
0
idea中@Data标签getset不起作用

背景:换电脑以后在idea中有@data注解都不生效 解决办法:idea装个插件 https://blog.csdn.net/seapeak007/article/details/72911529...

栾小糖
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部