位置隐私保护系统设计及实现计算机信息和技术专业_第1页
位置隐私保护系统设计及实现计算机信息和技术专业_第2页
位置隐私保护系统设计及实现计算机信息和技术专业_第3页
位置隐私保护系统设计及实现计算机信息和技术专业_第4页
位置隐私保护系统设计及实现计算机信息和技术专业_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、目录摘 要英文摘要.第一章 绪 论11.1 研究背景及意义11.2 论文主要内容和结构2第二章 相关技术概述42.1 Android平台系统架构42.1.1 Android平台层次架构52.2.1 定位服务架构概述62.2.2定位服务源码分析72.2.3定位服务运行流程8第三章 Android平台位置隐私保护系统的设计与实现103.1系统开发平台和环境配置103.1.1 Eclipse开发平台简介103.1.2开发环境配置103.2 Android模拟位置实现133.2.1总体过程流图和介绍133.2.2 android.location 包中的类和接口143.2.3 系统服务的启动与注册16

2、3.2.4 LocationManagerService183.2.5 LocationProviderInterface193.2.6 GpsLocationProvider 的实现213.2.7 JNI层与 HAL层263.2.8 总结29第四章 系统测试与评估324.1 测试工具和测试目的324.2 测试过程324.3成果截图324.4结果分析35第五章 总结和展望365.1 总结365.2 展望36致 谢38参考文献39位置隐私保护系统及实现摘 要:随着移动定位设备及无线通讯技术的不断完善,以及由于移动定位设备的飞速发展,伴随产生基于位置服务(Location-Based Servic

3、es, LBS),通过LBS人可以享受诸多的便利,例如查询附近医院餐厅、导航路线、查询目前交通状况等。然而LBS在给人们带来方便的同时,用户的位置信息同样面临着被泄漏的危险。用户的位置信息往往与用户的个人信息(比如,其所在公司、家庭住址、身体健康状况以及宗教信仰等等)息息相关。研究者们针对位置隐私泄露问题进行了大量的研究并提出了位置信息隐私保护方法,例如假位置匿名技术、数据混淆方法以及K-匿名等等。这些方法大部分都针对基于位置服务中的位置隐私泄漏问题而进行研究探索的,然而对于Android操作系统内的位置隐私保护方法的研究还为数不多。 为了保护Android操作系统下用户的位置信息,本文提出来

4、通过百度地图API定位当前位置,然后通过安卓位置管理器维护一个线程不断设置当前手机位置,以达到位置隐私的保护的目的,并将该设计应用到Android操作系统中,从而实现Android环境下的位置隐私保护。 关键词:基于位置服务(LBS);安卓;位置管理器;位置隐私保护。 Location Privacy Protection System and ImplementationABSTRACT:With the continuous improvement of the mobile positioning devices and the wireless communication techno

5、logy, and the development of mobile positioning equipment, the Location-Based Services (LBS) are produced. When people use LBS,they can enjoy a lot of convenience, such as, searching the closest restaurant to a hospital, navigation path, querying the situation of current traffic, etc. However the LB

6、S can expose the users location information, and then threat the users privacy. The users location information is usually closely linked with the users identity information, for example, the name of their company, home address, health status, religious beliefs, etc. Researchers have conducted extens

7、ive studies for location privacy problem and they put forward some algorithms for protecting location information, including false location technology, data confusion, K-anonymous, and so on. Most of these algorithms only provide theoretical solution, and till now there is little practical research

8、on how to integrate the location privacy protection into the Android system. To protect the users location information in Android system, This thesis proposes to locate the current position through Baidu Maps API, then through Android location manager to maintain a thread constantly and to set the c

9、urrent phone location, in order to achieve location privacy protection, and the design is applied to the Android operating system, so as to realize the location privacy protection under the Android environment.Keywords:Location-Based Services (LBS); Android; Location Manager;Location Privacy Protect

10、ion 第一章 绪 论1.1 研究背景及意义伴随定位技术的日益完善以及无线通信网络的快速发展,基于位置服务的应用越来越受到人们的关注,并且现有的移动设备具有强大的传输、存储、定位以及简单的计算能力,可以通过WiFi等与基站进行简单通信。通过将移动设备与导航系统以及位置探测技术的相互结合,人们可以使用手机、平板电脑等移动设备获得与自己当前位置有关的个性化服务,也就是基于位置的服务。基于位置的服务包括位置导航,位置感知广告,交通环境咨询,旅游服务,基于位置的游戏和导航,结合用户当前的位置,帮助用户寻找距离用户最近的饭店、餐馆、宾馆、医院、加油站等公共娱乐场所。用户在享受这些便利的同时,担心自己的隐

11、私受到威胁,即位置信息暴露给不受信任的第三方所带来的隐私泄露问题。 用户的有些位置信息是敏感的,因为用户的日常行为与位置密切相关,例如用户的工作单位、宗教信仰、身体状况等均与用户隐私息息相关,一旦用户位置信息被不法份子获得,将会给用户人身财产安全带来隐患。因此,如何使用户在享受服务的同时又不把自己的隐私泄露出去,更加重视自己的位置隐私保护。正因如此,其中多数用户不熟悉位置信息泄漏的知识,从而自身位置信息是否泄漏无法获知。与此同时,人们也对使用LBS时导致敏感信息泄露的问题越来越关注。如果用户向非可信的基于位置的服务提交查询服务的途径是尚未经过安全认证的。那么用户可以自己选择与已经通过安全认证的

12、匿名服务器建立可靠性链接,该匿名器在传递用户的信息之前,先移除与识别用户身份的ID(身份标识号),然后再将用户的其他信息传递给基于位置的服务。虽然这样移除可以识别用户身份的ID信息,但是这种操作仍然存在以下缺点:首先,基于位置的服务在处理与用户查询信息时需要用户的位置信息,如果基于位置的服务是未经安全认证的恶意服务商,它仍可以使用一些技术对用户的查询信息进行分析从而得到用户的位置信息并与用户的身份相联系,以致该安全处理操作失败。比如,用户在公司提交一个基于位置的服务,经过位置信息处理后,该用户的位置有可能转换为与用户公司所在街道的位置信息。其次,用户与可靠的匿名服务器之间的连接也是存在风险的,

13、如果攻击者能够观察到用户的操作,攻击者很容易将这个操作与用户相互联系起来。因此,仅仅移除用户的ID信息,是不能够完全保护用户的真实身份信息的。最后,在处理用户的查询信息时,只单一使用用户所在位置的周边街道信息替代用户的真实位置信息来保护用户的身份信息,也是不够充分的。例如,当用户处于地域广阔人口稀少的山区时,即使这个区域非常广阔,但是周围与该用户同时使用基于位置服务的用户可能很少甚至几乎没有其他用户。通过以上分析,对用户的位置隐私保护问题还需进行深一步的研究。如今是网络飞速发展的时代,使用智能移动设备的用户越来越多,尤其是配载Android操作系统的智能移动设备用户。用户在使用手机软件的时候随

14、时都面临着自己位置被泄漏的危险。下面介绍Android操作系统的位置隐私保护的现状:Android操作系统广泛应用于各种智能手机、平板电脑等移动设备,具备较大的市场占有率和用户基数,所以很多软件开发商从中看到利益。这些开发商开发自己特色的软件吸引用户的使用,在用户使用的过程中就会获得用户的位置,其中很多软件并不需要用户开启定位服务,目前Android平台下的位置保护方法还很少,典型的针对Google位置泄漏存在两种一般方法: 一、关闭位置服务,更有利的措施是将移动设备恢复出厂设置; 二、安装位置隐私保护软件,例如小红马一位置隐私保护软件,它是一款Android平台可以保护用户位置信息以防被Go

15、ogle盗取的软件。默认情况下Google手机、平板电脑会自动开启定位服务,无时无刻的监视你的位置变化。软件可以让用户在必要的时候开启或者关闭位置服务功能。由以上这两种方法可以看出Android平台下的位置隐私保护仍存在很多缺点,例如单一的关闭开启位置服务,这样既不方便用户使用基于位置服务,又未从根本上保护用户的位置不被泄漏。鉴于目前支持位置服务的移动设备使用量愈加广泛,由此对位置隐私信息泄漏的概率也在增大,甚至威胁用户的生命财产安全。基于移动设备的位置隐私保护的研究就是进一步阻止和解决非法攻击者获取移动用户的位置或者移动轨迹信息。1.2 论文主要内容和结构本文针对上述问题进行移动设备下基于位

16、置服务的隐私保护技术的研究,具体涉及用户位置信息的保护以及用户使用软件可信度的保护。本文组织结构如下:第1章为绪论,介绍了课题研究的背景和意义,其中包括当前位置隐私保护算法的研究以及Android平台下位置隐私保护的现状。第2章研究了Android平台的系统结构,对Android平台下的相关技术进行了概述。第3章研究了位置隐私保护方案以及在Android平台下的设计与实现,该系统由内核层以及应用层两部分实现,本章对此做了详细介绍和说明。第4章本章主要介绍软件的测试与结果分析,还有必要的成果截图。第5章本章主要是对课题研究进行了总结,并对以后的工作进行展望与介绍。第二章 相关技术概述 Andro

17、id一词的本义指“机器人”,同时是Google于2007年11月5日宣布的基于Linux平台下的开源手机操作系统的名称,该平台是由操作系统、中间件、用户界面和应用软件组成。2.1 Android平台系统架构Android操作系统平台是以Linux操作系统为背景基础的,扩充Android运行时环境(Android Runtime)和Android应用程序开发平台(Android Platform), Android操作系统包括有:1)应用程序; 2)应用程序框架;3)各类链接库;4) Android运行时;5) Linux内核 图2.1 Android系统架构 图2.1是Android系统架构图

18、,如图所示,Android系统采用了分层架构,共分为4个层,从高层到低层分别是应用程序层、应用程序框架层、各类链接库和Linux内核层。2.1.1 Android平台层次架构观察Android系统架构图2.1可以发现,其提供的基本应用程序(如主程序,联系人,浏览器等)运行在应用程序框架层上。同样,开发者借助Android下的SDK调用应用程序框架层的API (Application Programming Interface,应用程序编程接口)开发出应用也会运行在应用程序框架层之上。下面对Android系统分层结构进行简单介绍:(1)应用程序层:Android平台包含了许多用Java语言编写的

19、、可以与用户直接交互的应用程序,这些应用程序还可以与其他应用程序相互替换。其实Google最开始就在Android系统中捆绑了一些核心应用,比如Email、SMS、日历、地图、浏览器、联系人等等。(2)应用框架层:这一层大部分由Java语言编写,它是Android平台上Java世界的基石。很多核心应用程序也是通过这一层来实现其核心功能,开发人员可以直接使用其提供的组件来进行快速的应用程序开发工作,也可以通过继承来实现个性化的拓展。通过提供一个自由开放的开发平台,Android提供给开发者建立极其丰富和创新应用的能力。开发者可以自由地享有硬件设备的优势,例如:本地信息访问、后台运行服务、添加状态

20、栏通知等等。应用程序实际上是系统的一组服务,主要包括:视图、内容提供者、资源管理器、通知管理器、活动管理器等。(3)各类链接库:这一层提供动态库(也叫共享库)、Android运行时库、Dalvik虚拟机等。从编程语言的角度来说,Android还包括了一个C/C+库的集合,它们被系统的众多组件使用。这一层大部分都是用C或C+写的,所以也可以简单地把它看成是Native层。通过Android的应用程序框架,这些功能被开放给开发者使用。其中一些核心库,如:系统C库、媒体库、LibWebCore、SGL、 3D libraries、FreeType、SQLite。(4) Android运行时:Andr

21、oid运行时又分为核心库和Dalvik虚拟机两部分。核心库,实现Sun Java编程语言中核心库的大部分功能。这里主要通过JNI的方式向应用程序框架层提供调用底层程序库的接口。Dalvik虚拟机是为了可以同时高效地运行多个VMs(VMware,虚拟机)而实现的,而且通过Linux内核来实现底层的各种功能,比如线程和低级内存管理。(5) Linux内核层:包含了Linux内核和一些驱动模块(比如USB驱动、Camera驱动、音频驱动等)。目前Android依赖于Linux2.6内核提供的核心系统服务,例如安全、内存管理、进程管理、网络栈、驱动模块等,Android对内核进行了增强。2.1.2 A

22、ndroid应用程序组件应用程序组件是Android应用程序的基本构建单元,每个组件是系统进入你的应用程序的不同入口点。不是所有的组件对于用户来说都是实际上的入口点,有些是互相依赖的,但是每个组件都有特定的作用,每个都是唯一的构建单元,这些构建单元定义应用程序的全部行为。Android有四种不同类型的应用程序组件,这些组件都可以单独实例化,每种都有不同的用处并且有不同的生命周期。 应用程序对外共享功能一般也是通过以下4种应用程序组件实现。这四类不同的应用程序组件分别有:Activity (Android的窗体)组件、Service(服务)组件、Broadcast Receiver(广播接收器)

23、组件、Content Provider(内容提供者)组件2.2 Android平台定位服务架构分析2.2.1 定位服务架构概述Android系统中定位服务的架构如图2-2所示。该结构共分为四层:2.2 Android定位服务架构第一层是应用层,即Android. Location包中包含的内容,是以Java语言提供的API 。第二层是框架层,这一层包含了系统服务的实现,主要是由Java语言来实现。第三层是共享库层,本层由C以及C+语言实现,框架层与共享库之间使用JNI进行衔接。第四层是Linux内核层,整个Android系统都是以Linux内核为基础的。从上至下它们是逐层依赖的关系,每层依赖下

24、面一层完成其所需提供的服务。2.2.2定位服务源码分析Framework层:1) 路径位于frameworks/base/location/javalandroid/location,一般由App调用该目录,API包是Android. Location。2)frameworks/base/location/java/com/android/internal/location,该目录是Location服务在Framework中的内部实现。3)framework/services/java/com/android/server,这个是内部实现在Location服中的一个封装。2.JNI层:路径位于

25、frameworks/base/core/jni/android_location_GpsLocationProvider.cpp,JNI层仅有一个文件,在这里有着承上启下的作用。上层承接Framework层,下层调用HAL层的具体硬件抽象实现。3.HAL (Hardware Abstract Layer硬件抽象层):1)hardware/libhardware_legacy/gps2)hardware/libhatdware_legacy/include/hardware_legacy/gps.hHAL层相当于一个Linux应用程序接口,通过open, close等对硬件设备进行操作。在4.

26、2版本中提供了对美国高通(QCOM)公司的GPS的实现,在以下目录:/hardware /qcom。2.2.3定位服务运行流程1.服务注册阶段在Android系统中,位置服务通过系统的ServiceManager这个管理系统服务对象类来注册。2.服务运行阶段(1) LocationManagerService启动后,最主要的作用是提供定位服务,在上面架构图中可以看到获取的位置信息可以选择不同的LocationProvider,每个LocationProvider可能会记录最近一次的定位信息。同时,我们可以使用监听器来主动获取位置更新通知。所有的这些功能,都是在LocationManagerSe

27、rvice中实现的。(2)LocationManagerService中的主要内容都是围绕着Location Provider而实现的。LocationManagerService其实是一个线程类,除了用于构造函数以外,在其run方法中又完成了另一部分的初始化工作,主要是调用其initialize方法。在initialize方法中调用了loadProviders方法,loadProviders这个方法中完成了LocationProvider的加载工作。该方法又经过同步加锁以及异常的包装,最终的实现方法是1oadProvidersLocked。(3)GpsLocationProvider的构造函

28、数完成了:a.在系统中注册了一个BroadcastReceiver,这个BroadcastReceiver的作用是负责在使用GPS模块时响应对于闹钟和短消息的事件处理。 b.读取GPS模块的外部配置文件,这是一个属性文件,该文件是用来配置GPS模块扩展功能的服务器信息,例如XTRA服务器、NTP服务器等信息。该文件的位置记录在PROPERTIES FILE字段中,它的值是“/etc/gps.conf”。c.创建并启动GpsLocationProviderThread,这是一个线程类,对于GPS模块功能的请求都是在这个线程中完成的。(4)GPS模块的功能实现最终需要调用硬件来完成,这些实现必须要

29、通过c/c+语言才能完成。为了能在GpsLocationProvider.java中调用这些功能, GpsLocationProvider中包含了许多的native方法。JNI层的实现依赖HAL层接口,提供对于GpsLocationProvider.java中native方法的实现。(5)JNI层有一个重要的方法Android_location_GpsLocationProvider_class_init_native这个方法在GpsLocationProvider类中的静态初始化块中会被调用,它的作用有三个:在JNI层初始化对于GpsLocationProvider java中回调方法的引用

30、。尝试打开GPS设备。如果GPS设备打开成功,则获取GPS扩展接口的指针。(6)到达HAL层后就直接和kernel中的GPS硬件驱动进行交互来获取位置信息。本章总结,基于Android平台的位置隐私保护系统的技术研究,主要目的是实现Android平台下的位置隐私保护。Android平台是用于移动智能设备上的操作系统,在程序开发中,应考虑以下条件:程序大小、程序执行效率、内存占用比等固有的条件限制。若在Android平台下实现位置隐私保护,该算法必须执行效率高、资源开销少、可移植性好。第三章 Android平台位置隐私保护系统的设计与实现3.1系统开发平台和环境配置3.1.1 Eclipse开发

31、平台简介Eclipse是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。然而,Eclipse附带了一个标准的插件集,包括Java开放工具(Java Development Tools,JDT)。Eclipse不仅仅可以被当做Java IDE来使用,同时它还包括了插件开发环境(Plug-in Development Environment,PDE),其主要针对系统扩展Eclipse的软件开放人员。Eclipse主要包括四个部分:Eclipse Platform、JDT、CDT和PDE。JDT支持Java开放、CDT支持C开放、

32、PDE用来支持插件开放,Eclipse Platform则是一个开放的可扩展IDE,提供了一个通用的开放平台,其和JDT、PDE组件共同合并组成Eclipse SDK(软件开放包),一个具有丰富特性的开发环境由他们在一起提供的。3.1.2开发环境配置此部分主要介绍开发系统所使用到的工具,以及如何搭建开发系统的环境。1.JDK安装首先下载JDK,然后就是安装提示一步一步走。安装后,设置环境变量过程如下:(1)我的电脑-属性-高级-环境变量-系统变量中添加以下环境变量。 (2)JAVA_HOME值为: D:Program FilesJavajdk1.6.0_18;(3)CLASSPATH值为:.;

33、%JAVA_HOME%libtools.jar;%JAVA_HOME%libdt.jar;%JAVA_HOME%bin;(4)Path:%JAVA_HOME%bin; 安装完成之后,可以在检查JDK是否安装成功。打开cmd窗口,输入java version查看JDK的版本信息,出现如图3.1所示的画面表示安装成功:图3.1 JDK安装2.Eclipse安装Google提供Android的集成开发环境Eclipse的开发插件Android Development Tools(ADT),为了使用该插件,首先需要下载并安装Eclipse。ADT插件要求Eclipse的版本是3.3以上,Eclipse

34、的下载网址是/downloads/,下载解压后可以直接使用Eclipse。3.Android SDK的安装在Android Developers下载android-sdk_ro5-windows.zip,下载完成后解压到任意路径。运行SDK Setup.exe,点击Available Packages。如果没有出现可安装的包,请点击Settings,选中Misc中的“Force https:/”这项,再点击Available Packages。选择希望安装的SDK及其文档或者其他包,点击Installation Selected、Accept All、

35、Install Accepted,开始下载安装所选包。4.ADT安装打开Eclipse IDE,进入菜单中的Help-Install New Software。点击Add.按钮,弹出对话框要求输入Name和Location:Name自己随便取,Location输入http:/dl-图3.2 ADT添加地址图确定返回后,在work with后的下拉列表中选择我们刚才添加的ADT,我们会看到下面出有Developer Tools,展开它会有Android DDMS和Android Development Tool,勾选他们。如下图3.3所示: 图3.3 ADT安装图然后就是按提示一步一步next。

36、5.创建AVD在Eclipse中选择Windows-Android SDK and AVD Manager。点击左侧面板的Virtual Devices,再右侧点击New。填入Name,选择Target的API,SD Card大小任意,Skin随便选,Hardware目前保持默认值。点击Create AVD即可完成创建AVD。运行新新建的模拟器,在列表中选中新建要运行的模拟器,然后单击“start.”;再单击“launch”。当运行成功后可见如图3.4所示:图3.4 模拟器界面图3.2 Android模拟位置实现3.2.1总体过程流图和介绍图3.5 流程图通过百度地图API定位当前位置,然后页

37、面呈现,根据用户点击设定的新地址,调用百度地图API获取此地址信息,最后通过安卓API维护一个线程不断刷新设置新地址,将新地址存储在sharedprefrences(Android平台上一个轻量级的存储类),其他通过本地的位置管理器获取的经纬度/坐标/位置的手机应用程序(App)只能定义到用户设立的虚假位置,从而实现位置信息的隐私保护。3.2.2 android.location 包中的类和接口表3.1 android.location 包中的类和接口名称类型说明GpsStatus.Listener接口用于接受 GPS 状态改变时的通知GpsStatus.NmeaListener接口用于接受

38、Nmea(为海用电子设备制定的格式)信息LocationListener接口用于接受位置信息改变时的通知Address类用于描述地址信息Criteria类用于选择 LocationProviderGeocoder类用于处理地理位置的编码GpsSatellite类用于处理地理位置的编码GpsStatus类用于描述 GPS 设备的状态Location类用于描述地理位置信息,包括经度,纬度,海拔,方向等信息LocationManager类用于获取和调用定位服务LocationProvider类描述 Location Provider 的超类,Location Provider 是真正用来获取位置信息

39、的组件。Location Provider 的实现主要可以分为两类:一种依赖于 GPS 设备,另一种依赖网络状态 在表 3.1 中,最重要的类是 LocationManager,这是整个定位服务的入口类。 使用定位服务提供的 API的代码: public class MainActivity extends Activity / 测试使用的日志 Tag private static final String TAG = LocationService API Demo; / 将在 onCreate 中被初始化 private LocationManager locationManager; /

40、 接受位置更新的监听器 protected final LocationListener locationListener = new LocationListener() / 当位置发生变化时,输出位置信息 public void onLocationChanged(Location location) Log.d(TAG, Location changed to: + getLocationInfo(location); public void onProviderDisabled(String provider) Log.d(TAG, provider + disabled.); pub

41、lic void onProviderEnabled(String provider) Log.d(TAG, provider + enabled.); public void onStatusChanged(String provider, int status, Bundle extras) Log.d(TAG, provider + status changed.); ; Override protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentVie

42、w(R.layout.activity_main); / 获取 LocationManager locationManager = (LocationManager)getSystemService(LOCATION_SERVICE); Override protected void onResume() super.onResume(); / 指定一个 Provider String currentProvider = LocationManager.NETWORK_PROVIDER; Log.d(TAG, CurrentProvider: + currentProvider); / 获取

43、Provider 最后一个记录的地址信息 Location lastKnownLocation = locationManager .getLastKnownLocation(currentProvider); if (lastKnownLocation != null) Log.d(TAG, LastKnownLocation: + getLocationInfo(lastKnownLocation); else Log.d(TAG, Last Location Unkown!); / 注册监听器接受位置更新 locationManager.requestLocationUpdates(cu

44、rrentProvider, 0, 0, locationListener); Override protected void onPause() super.onPause(); / 移除监听器 locationManager.removeUpdates(locationListener); Log.d(TAG, LocationListener: + locationListener + removed.); /* * 将 Location 对象转换成字符串形式方便显示 * * param location * Location 对象 * return 字符串形式的表示 */ privat

45、e String getLocationInfo(Location location) String info = ; info += Longitude: + location.getLongitude(); info += , Latitude: + location.getLatitude(); if (location.hasAltitude() info += , Altitude: + location.getAltitude(); if (location.hasBearing() info += , Bearing: + location.getBearing(); retur

46、n info; 3.2.3 系统服务的启动与注册在框架层,实现位置服务的类是 LocationManagerService,这是一个系统服务。 在 Android 系统中,系统服务运行在一个专门的进程中,这个进程名称为 system_server。该进程在系统启动的时候便被加载和启动。系统中有一个专门用来管理系统服务的类,它叫做 ServiceManager。这个类负责注册并管理所有的系统服务。 当应用程序想要使用系统服务时,需要通过服务的代理来调用服务。由于客户应用程序运行在自己的进程中,这和 system_server 是两个独立的进程,因此代理需要通过进程间通讯将请求发送到 system

47、_server 进程,由该进程来响应服务,然后再返回结果。整个这个机制称之为 Binder 机制。Binder 机制在 Android 系统中应用非常之广,几乎所有的进程间通讯都是使用该进制完成的。图 3.5描述了 Binder 机制的请求和响应过程:图3.5 Binder 机制Binder Driver 作为 Binder 机制的核心部分是完成底层进程间通讯的工作。被请求的进程(这里是系统服务进程)通常会缓存一些线程,当有请求时,在这些线程中完成请求。mService 字段是在 LocationManager 的构造函数中被初始的,找到 LocationManager 构造函数被调用的地方的

48、代理对象是谁。 3.2.4 LocationManagerServiceLocationManagerService 最主要的作用是提供定位服务,获取位置信息可以选择不同的 Location Provider,每个 Location Provider 可能会记录最近一次定位信息。同时,也可以使用监听器来主动获取位置更新通知。所有的这些功能,都是在 LocationManagerService 中实现的。表3.2 LocationManagerService 中的主要字段名称类型说明mLastWriteTimeHashMap记录最后一次位置更新的时间,这是一个以 Location Provide

49、r 名称为键的映射。mEnabledProvidersSet有效的 Location Provider。mDisabledProvidersSet无效的 Location Provider。sProvidersLoadedbooleanLocation Provider 是否已经被加载。mNetworkLocationProviderPackageNameString提供以网络方式进行定位服务的包名。mGeocodeProviderPackageNameString提供地理位置码服务的包名。mLocationHandlerLocationWorkerHandler这是一个 Handler,用来

50、处理位置信息更新和包更新两种消息。mNetworkLocationProviderLocationProviderProxy以网络方式提供定位服务的 Location Provider 的代理。mGpsLocationProviderLocationProviderInterface依赖于 GPS 模块实现定位的 Location Provider。mProvidersArrayList所有的 Location Provider。mProvidersByNameHashMap所有的 Location Provider,以名字为键存储在映射中。mLockObject作为内部实现的锁使用。mLas

51、tKnownLocationHashMap最近一次的定位信息,以 Location Provider 的名称为键的映射。mLastWriteTimeHashMap记录最后一次位置更新的时间,这是一个以 Location Provider 名称为键的映射。mPackageMonitorPackageMonitor监测器,监测服务包更新事件,并发送消息给 mLocationHandler。3.2.5 LocationProviderInterfaceLocation Provider 是真正获取位置信息的模块。在 android.location 包中,用 LocationProvider 这个接

52、口来描述。而这一接口是提供给应用层 API 使用的,在 LocationManagerService 中,Location Provider 使用另外一个接口来描述,这就是 vider. LocationProviderInterface,LocationManagerService 对于定位服务的实现均是通过调用 LocationProviderInterface 来完成的。表3.3 LocationProviderInterface 接口说明名称说明getName获取当前 Location Provider 的名称requiresNetwor

53、k该 Location Provider 是否需要网络requiresSatellite该 Location Provider 是否需要卫星requiresCell该 Location Provider 是否需要手机蜂窝信号hasMonetaryCost该 Location Provider 是否需要耗费金钱supportsAltitude该 Location Provider 是否支持海拔高度信息supportsSpeed该 Location Provider 是否支持速度信息supportsBearing该 Location Provider 是否支持方位信息getPowerRequire

54、ment获取该 Location Provider 的耗电量级别meetsCriteria该 Location Provider 是否能符合指定的 CriteriagetAccuracy获取该 Location Provider 的精度级别isEnabled查询有效状态enable使该 Location Provider 有效disable使该 Location Provider 无效getStatus获取该 Location Provider 的状态getStatusUpdateTime获取该 Location Provider 的状态更新时间enableLocationTracking使该 Location Provider 位置追踪有效requestSingleShotFix请求 Single Shot FixgetInternalState获取该 Location Provider 的内部状态setMinTime设置最小时间updateNetworkState使该 Location Provider 更新网络状态updateLocation使该 Location Provider 更新位置sendExtraCommand使该 Location Provider 发送辅助的命令addLi

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论