- Android 系统概述
- 什么是智能手机?智能手机操作系统有哪些?
- Android(安卓)是什么?
- Android 系统架构(图解)
- Android 7 新特性介绍
- Android 开发环境搭建
- Android 开发环境搭建教程(图解)
- Android SDK 是什么?
- 通过 Android Studio 创建 Android 应用程序(附带解析)
- Android Studio 的基本调试
- Android 应用程序结构:Android 组件和资源详解
- Android 四大核心组件:Activity+Service+BroadcastReceiver+ContentProvider
- Android Activity 组件及其生命周期
- Android 资源(res 和 assets 目录)
- AndroidManifest.xml 配置文件详解
- Android App Widgets 组件详解
- Android 系统的进程和线程
- Android GUI(图形用户界面)开发
- Android View 和 ViewGroup
- Android 使用 XML 文件定义用户界面
- Android 五大布局:FrameLayout、LinearLayout、AbsoluteLayout、RelativeLayout 和 TableLayout
- Android 创建 Widget 组件实例详解
- Android Button:按钮控件
- Android CheckBox:多选按钮控件
- Android RadioGroup:单选按钮控件
- Android TextView:文本框控件
- Android EditText:编辑框控件
- Android Spinner:下拉列表控件
- Android AutoCompleteTextView:自动完成文本框控件
- Android DatePicker 和 TimePicker:时间日期选择器
- Android ProgressBar:进度条控件
- Android ScrollView:滚动视图
- Android SeekBar:拖动条控件
- Android RatingBar:评价条控件
- Android ImageView 和 ImageButton:图片视图和图片按钮
- Android ImageSwitcher 和 Gallery:图片切换器和图库
- Android GridView:网格视图
- Android Tab:面板标签控件
- Android 菜单:选项菜单+上下文菜单+子菜单
- Android Bitmap(点阵图像、绘制图像)
- Android 对话框(AlertDialog+ProgressDialog)
- Android 多窗口模式(分屏模式)
- Android 事件监听器和回调方法
- Android 电话短信拍照开发教程
- Android Intent:不同应用程序之间通信的桥梁
- Android 实现拨打电话功能
- Android 实现接收短信和发送短信功能
- Android 调用相机进行拍照
- Android 多媒体开发
- Android Service 生命周期和使用方法
- Android BroadcastReceiver:接收广播
- Android 音频以及音频播放器开发实例
- Android MediaRecorder 录制音频
- Android 视频以及视频播放器实例
- Android Camera 相机以及相机程序开发实例
- Android MediaRecorder 录制视频
- Android 数据存储(SQLite 数据库、Android App 数据备份和恢复 )
- Android 数据存储之 SharedPreferences
- Android 数据存储之文件存储
- Android 使用 SQLite 数据库存数数据
- Android SQLite 数据库操作实例
- Android ContentProvider(内容提供者)
- Android 使用系统提供的 ContentProvider
- Android 自定义 ContentProvider
- Android 使用自定义 ContentProvider
- Google App Engine 是什么?
- Android APP 数据备份与恢复
- Android BackupAgent 实现数据备份与恢复
- Android BackupAgentHelper 实现数据备份与恢复
- Android 网络编程
- 借助 GPE 让 Android APP 和 Google App Engine 通信
- Android HTTP 通信
- Android HttpURLConnection 访问互联网资源
- Android 通过 GET 方式获取互联网资源
- Android 通过 POST 方式获取互联网资源
- Android Socket 编程(附带实例)
- Bluetooth(蓝牙)是什么?
- Android 蓝牙通信开发教程(详解版)
- Android 蓝牙通信开发实例演示
- WIFI(无线局域网)是什么?
- Android WiFi 开发(WiFi 编程)实例演示
- WIFI Direct(WIFI 直连)是什么?
- Android WIFI Direct 开发教程
- Android WIFI Direct 开发实例演示
- NFC(近场通信)是什么?
- Android NFC 开发教程
- Android USB 开发简介
- Android USB 附件模式开发教程
- Android USB 主机模式开发教程
- Android SIP 开发教程
- Android 智能传感器
- LBS(位置服务)和 GPS(全球定位系统)简介
- Android LBS 位置服务开发简介
- Android GPS 定位开发教程
- Google Map API 开发简介
- Android Google Map API Key 详细申请步骤
- Google Map API 开发 Android 地图应用实例
- Android 传感器开发教程
- Android 运动传感器开发教程
- Android 位置传感器开发教程
- Android 环境传感器开发教程
- Android 绘图(2D 绘图、3D 绘图)
- Android 2D 绘图开发简介
- Android 使用自定义 View 绘图
- Android 使用 Bitmap 绘图
- Android 使用 SurfaceView 绘制静态图像
- Android 使用 SurfaceView 绘制动态图像
- Android Drawable 开发简介
- Android 3D 绘图开发简介
- Android 硬件加速开发简介
- Android RenderScript 开发简介
- Android App 的国际化和本地化
- Android 国际化和本地化开发简介
- Android 手机区域设置详细步骤
- Android 未本地化应用开发教程
- Android 本地化应用开发教程
- Android 文本输入与复制粘贴
- Android 剪贴板框架开发简介
- Android 剪贴板数据转文本开发简介
- Android 复制粘贴开发教程
- Android Content Provider 复制复杂数据开发教程
- Android 一键复制粘贴开发实例
- Android 企业级应用开发
- Android 设备管理 API 概述
- Android 开发设备管理 API 应用教程
- Android 文本语音 API 开发教程
- Android TV 应用开发教程
- Android TV 应用开发实例
- Android 可穿戴设备应用开发教程
- Android 应用程序的发布
- Android 应用程序发布的步骤
- Android 为什么要为应用程序签名?
- Android 导出未签名应用程序开发步骤
- Android 生成签名文件开发教程
- Android 应用程序签名开发教程
- zipalign 工具优化应用程序开发简介
- Google Play Store( Android Market)发布简介
Android LBS 位置服务开发简介
手机设备的移动性决定了手机在位置服务方面拥有比固定设备更多的优势,可以开发多种基于移动设备的位置服务应用程序。
Android SDK 提供了 android.location 包和 Google Maps API 支持位置服务功能,开发人员可以方便地开发自己的位置服务应用程序。
Android 系统支持 GPS 定位方式和网络定位方式。GPS 方式的位置信息来自卫星,精度很高,但是 GPS 方式仅在户外有效,其首次获取位置时间较长并且非常耗费电量。
而网络定位方式使用的是移动通信基站和 WIFI 信号,这种方式在室内和户外都可以使用,响应快速,费电较少,但是精度难以保证。开发者应该根据应用程序的使用环境来确定具体的定位方式。
LocationManager 介绍
在 Android 的位置服务中,LocationManager 是一个非常重要的类,它位于 android.location 包中。
LocationManager 类用于管理 Android 用户位置服务信息,提供确定用户位置的 API,通过这个类可以实现定位、跟踪和目标趋近等功能。
LocationManager 对象不能直接实例化,可以通过 Context.getSystemService(Context. LOCATION_SERVICE) 方法获得。
LocationManager 对象可以完成以下三个方面的任务:
- 从用户的位置查询所有可用的 LocationProvider 列表。
- 从特定的 LocationProvider 周期性获取用户当前位置的功能。
- 当用户位置接近某个特定区域时,启动相关任务。
表 1 所示为 LocationManager 类的常用方法。
常用方法 | 方法描述 |
---|---|
getAllProviders() | 获得所有 LocationProvider 列表 |
getBestProvider (Criteria criteria,Boolean enabldOny) | 根据 criteria 返回最合适的 LocationProvider,其中 criteria 指定了一系列条件 |
getLastKnownLocation (String provider) | 根据 provider 获得最新位置信息 |
getProvider (String name) | 获得指定名称的 LocationProvider |
getProviders (boolean enabledOnly) | 获得可用的 LocationProvider 列表 |
ddProximityAlert (double latitude, double longitude, float radius, long expiration, PendingIntent intent) | 设定目标趋近警告 |
removeProximityAlert (PendingIntent intent) | 删除趋近警告 |
LocationProvider 介绍
LocationProvider 为位置提供者的抽象类,位置提供者提供手机设备周期性的地理位置报告。
LocationProvider 的常用方法如表 2 所示。
常用方法 | 方法描述 |
---|---|
getAccuracy() | 获取 LocationProvider 提供位置信息的精度 |
getName() | 获得 LocationProvider 的名称 |
getPowerRequirement() | 获得 LocationProvider 对电源的需求 |
hasMonetaryCost() | 获取当前 LocationProvider 是免费的还是收费的 |
meetsCriteria (Criteria criteria) | 确定当前 LocationProvider 是否符合特定条件 |
requiresCell() | LocationProvider 定位是否需要访问基站网络 |
requiresNetwork() | LocationProvider 定位是否需要 Internet 网络数据 |
requiresSatellite() | LocationProvider 定位是否需要获取卫星数据 |
supportsAltitude() | LocationProvider 提供的位置信息是否包含高度信息 |
supportsBearing() | 是否能够提供方向信息 |
supportsAltitude() | LocationProvider 是否能够提供速度信息 |
根据设备的不同可以使用不同的定位技术来实现位置服务,也就是获取不同的 LocationProvider,以下是 3 种获取 LocationProvider 实例的方法。
1)通过指定名称获取
根据 LocationManager 中的静态常量 GPS_PROVIDER 和 NETWORK_PROVIDER 来分别获得 GPS Provider 和 Network Provider,例如:
LocationManager manager=(LocationManager)getSystemService (Context.LOCATION_SERVICE); //指定 Provider 名称为 LocationManager.GPS_PROVIDER LocationProvider MyProvider=manager.getProvider(LocationManager.GPS_PROVIDER);
2)获取可使用的 LocationProvider 实例列表
通过调用 locationManager.getProviders(true) 方法就可以获得可利用的 LocationProvider 实例列表,例如:
342oolean enabledOnly=true; //获取 Provider 的集合 List<String>providers=locationManager.getProviders(enabledOnly);
3)根据 Criteria 获取符合条件的 LocationProvider 实例
每个 LocationProvider 都有一个条件集合,以便于应用程序可以选择合适的位置提供者。
例如有的 LocationProvider 要求设备本身具有 GPS 模块,并且要求看见卫星的数量,有的要求手机设备能够接入 Internet 或者特定网络等。Criteria 类被用于为 LocationProvider 设置相关条件。
Criteria 对象封装了获得 LocationProvider 实例的条件,可以根据指定的 Criteria 条件来过滤 LocationProvider 列表,以得到符合条件的 LocationProvider 实例。
Criteria 的常用方法如表 3 所示。
常用方法 | 方法描述 |
---|---|
isAltitudeRequired() | 返回 Provider 是否需要高度信息 |
isBearingRequired() | 返回 Provider 是否需要方向信息 |
isSpeedRequired() | 返回 Provider 是否需要速度信息 |
isCostAllowed() | 标识是否允许产生费用 |
setAccuracy (int accuracy) | 设置 Provider 的精确度 |
setAltitudeRequired (boolean altitudeRequired) | 设置 Provider 是否需要高度信息 |
setBearingRequired (boolean bearingRequired) | 设置 Provider 是否需要方位信息 |
setSpeedRequired (boolean speedRequired) | 设置 Provider 是否需要速度信息 |
setCostAllowed (boolean cost Allowed) | 设置是否需要产生费用 |
getAccuracy() | 获取位置信息的准确度 |
下面的代码使用 Criteria 对象创建了一个条件集,并根据该条件集查找到合适的 LocationProvider 对象,并从该 LocationProvider 对象获取位置信息。
//获取 Criteria 对象 Criteria criteria=new Criteria(); //设置需要更精细的定位精度要求 criteria.setAccuracy (Criteria.ACCURACY_FINE); //设置定位不需要高度信息 criteria.setAltitudeRequired (false); //设置不需要提供轴承信息 criteria.setBearingRequired (false); //设置允许收费 criteria.setCostAllowed (true); //设置低耗能 criteria.setPowerRequirement (Criteria.POWER_LOW); //根据设置的条件获取合适的 provider String provider=locationManager.getBestProvider (criteria,true); //得到 Location 对象 Location location=locationManager.getLastKnownLocation (provider);
4)LocationListener,提供定位信息发生改变时的回调功能。
此接口提供了 4 个常用方法,如表 4 所示。
常用方法 | 方法描述 |
---|---|
onLocationChanged (Location location) | 当坐标改变时触发此方法,如果 Provider 传进相同的坐标,他就不会被触发。 |
onProviderDisabled (String provider) | Provider 禁用时触发此方法,例如,GPS 被关闭时 |
onProviderEnabled (String provider) | Provider 启用时触发此方法,例如,GPS 被打开时 |
onStatusChanged (String provider,int status,Bundle extras) | Provider 的状态可用 AVAILABLE 暂时不可用 TEMPORARILY_UNAVAILABLE 和无服务 OUT_OF_SERVICE 三个状态之间切换时触发此函数。 |
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论