HardBirch

Android地理位置信息获取的相关技术点

时间:13-05-30 栏目:安卓技术篇 作者:魔豆先生 评论:0 点击: 7,641 次

提供重要的地理位置信息服务

1 Location Manager 管理服务
2 Provider 提供地理位置信息数据的来源

方式一:GPS 特点:精度高,耗电量大,不耗费流量 权限<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
方式二:NETWORK 特点:精度低,省电,需要网络访问  权限<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
或者权限<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
方式三:PASSIVE_PROVIDER ,SDK的解释是,并不自己实例化去获取地理位置,而是通过获取其他的服务或者activity更新位置,被动的获取更新。

操作基本步骤:
1 在manifest.xml文件中设置权限
2 获取LocaionManager
3 选择provider
4 创建listener

一、权限
android 的安全服务机制,如果应用要访问本地的资源例如联系人列表、拨号、GPS或者其他应用程序的数据,需要许可。

所以要使用地理位置信息的服务需要 在<manifest>标签下添加 android:name="android.permission.ACCESS_FINE_LOCATION"/>获得许可

也可通过单击manifest.xml文件的permission标签可视化的添加许可

二、LocationManager类

是 “LocationManager这个类提供了对系统位置服务的访问,这些服务允许应用程序获取设备地理位置的定期的更新,也可以在设备 接近一个指定的地理位置的时候发起一个指定activity的intent。你不需要创建LocationManager的实例,取而代之的是通过 Context.getSystemService(Context.LOCATION_SERVICE)获取。”

public Location getLastKnownLocation (String provider)

返回一个Location,这个location标明从给定provider获得最后已知的位置,也就是最近获取的位置。这个操作可以不必要启动provider,注意这个地址可能是已经过期的,例如使用的设备可能已经被关闭或者转向了另一个位置。
如果当前的provider被禁用,函数返回null

Throws
SecurityException     if no suitable permission is present for the provider.  //前面提到的权限的问题,没有允许会抛出安全性的异常,android系统的机制
IllegalArgumentException     if provider is null or doesn't exist            //非法参数异常,表示provider为null,或者不存在
------------------------------------------------------------------------------------------------------------------------------------------------

Location 类
这个类用来表示在一个特定时间被感应的地理位置信息,一个location包括一个经度,纬度,一个世界时间戳还有一些关于海拔,速度和方向的可选信息。
可以通过getLatitude() getLongitude() getProvider()等函数来获取封装信息中的经度纬度和提供信息的provider,这个比较简单。

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

注册listener到location update 事件上。每隔一段时间,LocationListenner会被调用,同时当前的位置或者状态进行更新。
接受最新的位置信息可能会花费一会时间,如果需要立刻获得位置信息,程序可以使用上面讲的getLastKonwnLocation方法
假如provider被用户停止,(比如关闭GPS等),更新会停止。并且onProviderDisabled方法会被调用,只要provider再次变为可用状态,onProviderEnable方法会被调用,并且更新操作立刻开始。

通 知的频率可以通过使用 minTime(最小更新时间 单位:毫秒)和minDistance(单位:米)参数,如果minTime大于0,LocationManager能够在minTime时间内休息来保 存电量,如果minDistance大于0,每变化这个距离就会进行一次更新,如果希望尽可能频繁的更新的数据,则把两个参数均设置为0.
后台的服务应该注意,设置一个合理的minTime使得设备一直保持GPS或者WIFI的时候不耗费太多的电量。

The calling thread must be a Looper thread such as the main thread of the calling Activity.
使用该方法的线程必须时开启消息循环的线程,例如被调用activity的主线程(可以参考Android线程机制,默认新建的线程是没有开启消息循环的,主线程开启消息循环,可以参考SDK的Looper类)

 

地理位置提供商SDK开发包对比

可以采用基于GPS,Network等不同的方式去获取地理位置信息,由于位置精度的差异,需要采用一定的策略和优先级来进行定位,地理位置信息的解析需要依赖响应的服务提供商,在此对比 百度地图定位SDK 高德地图API几个版本的SDK后,地图的SDK jar包更大,不仅仅包含定位功能还有包含附近商家,公交路线,路径规划等功能,百度的定位SDK侧重在定位功能,使用方便。

 

附:

百度Android 定位SDK

高德地图API


声明: 本文由( 魔豆先生 )原创编译,转载请保留链接: Android地理位置信息获取的相关技术点

Android地理位置信息获取的相关技术点:等您坐沙发呢!

发表评论


QQ群互动

Linux系统与内核学习群:194051772

WP建站技术学习交流群:194062106

魔豆之路QR

魔豆的Linux内核之路

魔豆的Linux内核之路

优秀工程师当看优秀书籍

优秀程序员,要看优秀书!

赞助商广告

友荐云推荐