Android位置服务与传感器.docx
- 文档编号:3484044
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:39
- 大小:1.04MB
Android位置服务与传感器.docx
《Android位置服务与传感器.docx》由会员分享,可在线阅读,更多相关《Android位置服务与传感器.docx(39页珍藏版)》请在冰豆网上搜索。
Android位置服务与传感器
第八章应用
8.1位置服务
位置服务(LBS,LocationBasedServices)又称定位服务,是指通过GPS卫星或者蜂窝网络,获取各种终端的地理坐标(精度和纬度),在电子地图平台的支持下,为用户提供基于位置导航、查询的一种信息业务。
GPS(GlobalPositionSystem,全球定位系统)是20世纪70年代由美国陆海空三军联合研制的新一代空间卫星导航定位系统。
GPS的原理是利用三维坐标中的距离公式和3颗卫星就可以计算出观测点的精度和高程。
2005年2月Google推出了GoogleMaps,该服务为Google的搜索服务增加了影响力,之后Google也将GPS应用放在了Android的设备中。
本章节我们将学习在Android系统下如何使用相关API实现位置服务功能。
8.1.1获取位置信息
由于手机设备的移动性,决定了手机在位置服务方面拥有比固定设备更多的优势,可以开发出多种基于移动设备的位置服务应用程序。
AndroidSDK提供了android.location包和GoogleMapsAPI支持位置服务功能,开发人员可以方便的开发自己的位置服务应用。
Android系统支持两种定位方式:
GPS定位和网络定位。
GPS定位信息来自于卫星,精度很高,但是仅在户外有效,其首次获取位置时间较长且耗电量非常大;而网络定位使用的是移动通信基站和Wifi信号,这种方式室内和户外都可以使用,响应速度快,耗电少,但是精度难以保证。
开发者需根据实际需求来选择所用的定位方式。
8.1.2LocationManager介绍
在Android位置服务中,LocationManager是一个非常重要的的类,它用于管理用户的位置服务信息,提供确定用户位置的API,通过这个类可以实现定位、跟踪和目标趋近等功能。
LocationManager对象不能直接实例化,需要通过Context.getSystemService方法获得
LocationManager对象可以完成下面三个方面的任务:
●从用户的位置查询所有可用的LocationProvider列表。
●从特定的LocationProvider周期性的获取用户当前位置的功能。
●当用户位置接近某个特定区域时,启动相关任务。
表8-1为LocationManager类的常用方法。
常用方法和属性
方法描述
getAllProviders()
获得所有的LocationProvider列表
getBestProvider(criteria,enabledOnly)
根据criteria返回最合适的LocationProvider
getLastKnownLocation(provider)
根据provider获得最新位置信息
getProvider(name)
根据名字获得LocationProvider
getProviders(enabledOnly)
获得可用的LocationProvider列表
requestLocationUpdates(provider,minTime,minDistance,listener)
通过给定的Provider名称,并将其绑定指定的LocationListener监听器
GPS_PROVIDER
静态字符串常量,表明LocationProvider是GPS
NETWORK_PROVIDER
静态字符串常量,表明LocationProvider是网络
表8-1LocationManager类的常用方法
8.1.3LocationProvider介绍
LocationProvider用来描述位置提供者,设置位置提供者的一些属性。
可以通过Criteria类来为LocationProvider设置条件,获得合适的LocationProvider。
表8-2列出了LocationProvider的常用方法和属性。
常用方法和属性
方法描述
AVAILABLE
静态整型常量,标示是否可利用
OUT_OF_SERVICE
静态整型常量,不在服务区
TEMPORAILY_UNAVAILABLE
静态整型常量,临时不可利用
getAccuarcy()
获得精度
getName()
获得名称
getPowerRequirement()
获得电源需求
hasMonetaryCost()
花钱的还是免费的
requiresCell()
是否需要访问基站网络
requiresNetWork()
是否需要Intent网络数据
requiresSatelite()
是否需要访问卫星
表8-2LocationProvider的常用方法和属性
LocationProvider中最常用的两个是GPS_PROVIDER和NETWORK_PROVIDER,就是前文提到过的GPS定位和网络定位两种方式。
使用下面代码可以获取系统所有的LocationProvider名称:
packageintroduction.android.gpsLocation;
importjava.util.List;
importandroid.app.Activity;
importandroid.location.LocationManager;
importandroid.os.Bundle;
importandroid.view.View;
importandroid.view.View.OnClickListener;
importandroid.widget.Button;
importandroid.widget.TextView;
publicclassGooglemapActivityextendsActivity{
/**Calledwhentheactivityisfirstcreated.*/
Buttonbutton;
TextViewtextview;
LocationManagermanager;
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
button=(Button)findViewById(R.id.btn_listen);
textview=(TextView)findViewById(R.id.tv_01);
manager=(LocationManager)getSystemService(LOCATION_SERVICE);//获取系统location服务
button.setOnClickListener(newOnClickListener(){
@Override
publicvoidonClick(Viewv){
//获取系统所有的LocationProvider名称
List
Stringt="";
for(inti=0;i t+=list.get(i)+"\n"; } textview.setText(t); } }); } } Criteria类可以设置一系列的查询条件,用于查找当前设备当中符合条件的LocationProvider,下面的代码片段展示了Criteria类的一般用法: Criteriac=newCriteria(); c.setAccuracy(Criteria.ACCURACY_FINE);//精度高 c.setPowerRequirement(Criteria.POWER_LOW);//电量消耗低 c.setAltitudeRequired(false);//不需要海拔 c.setSpeedRequired(false);//不需要速度 c.setCostAllowed(false);//不需要费用 Stringprovider=locationManager.getBestProvider(c,false);//false是指不管当前适配器是否可用 System.out.println(provider); Location类 Location类用于描述当前设备的地理位置信息,包括了经纬度、方向、高度和速度等。 可以通过LocationManager.getLastKnownLocation(Stringprovider)方法可以获得Location实例。 其常用方法见表8-3。 常用方法和属性 方法描述 publicfloatgetAccuracy() 获得精确度 publicdoublegetAltitude() 获得高度 publicfloatgetBearing() 获得方向 publicdoublegetLatitude() 获取经度 publicdoublegetLongitude() 获得纬度 publicfloatgetSpeed() 获得速度 表8-3Location类的常用方法 Location的典型应用见下面的代码片段: Locationlocation=locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); doublelatitude=location.getLatitude();//经度 doublelongitude=location.getLongitude();//纬度 doublealtitude=location.getAltitude();//海拔 8.1.4使用GPS获取当前位置信息 使用GPS获取用户当前位置,一般需要以下几个步骤: 1)在Manifest文件中声明权限: --使用GPS定位需要以下权限--> name="android.permission.ACCESS_FINE_LOCATION"/> --使用网络定位需要以下权限--> name="android.permission.ACCESS_COARSE_LOCATION"/> 2)获取LocationManager对象: locationManager=(LocationManager)getSystemService(Context.LOCATION_SERVICE); 3)选择一个合适的LocationProvider,并注册一个周期性的位置更新: locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0,0,newMyLocationListener()); 4)实现LocationListener接口,获取位置信息: classMyLocationListenerimplementsLocationListener{ @Override publicvoidonLocationChanged(Locationlocation){ tv_01.setText("您当前位置的经度为: "+location.getLongitude()); tv_02.setText("您当前位置的纬度为: "+location.getLatitude()); } @Override publicvoidonProviderDisabled(Stringprovider){ //当provider被用户关闭时调用 } @Override publicvoidonProviderEnabled(Stringprovider){ //当provider被用户开启后调用 } @Override publicvoidonStatusChanged(Stringprovider,intstatus,Bundleextras){ //当provider的状态在OUT_OF_SERVICE、TEMPORARILY_UNAVAILABLE和AVAILABLE之间发生变化时调用 } } 实例GPSLocation演示了使用GPS获取用户位置信息的过程,运行效果如图8-1所示。 图8-1实例GPSLocation的运行效果 由于模拟器没有真正的GPS硬件,所以需要在DDMS中模拟GPS服务,图8-2展示了再EmulatorControl面板上手动发送经纬度信息来测试位置服务。 图8-2EmulatorControl面板 下面是实例GPSLocation的主界面布局文件main.xml的代码: xmlversion="1.0"encoding="utf-8"? > android=" android: orientation="vertical" android: layout_width="fill_parent" android: layout_height="fill_parent" > android: layout_width="fill_parent" android: layout_height="wrap_content" android: text="@string/hello" />
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Android 位置服务与传感器 位置 服务 传感器