Android位置服务与传感器Word文档下载推荐.docx
《Android位置服务与传感器Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《Android位置服务与传感器Word文档下载推荐.docx(39页珍藏版)》请在冰豆网上搜索。
根据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<
String>
list=manager.getAllProviders();
Stringt="
"
;
for(inti=0;
i<
list.size();
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定位需要以下权限-->
uses-permissionandroid:
name="
android.permission.ACCESS_FINE_LOCATION"
/>
--使用网络定位需要以下权限-->
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());
}
publicvoidonProviderDisabled(Stringprovider){
//当provider被用户关闭时调用
publicvoidonProviderEnabled(Stringprovider){
//当provider被用户开启后调用
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"
>
LinearLayoutxmlns:
android="
android:
orientation="
vertical"
layout_width="
fill_parent"
layout_height="
>
TextView
wrap_content"
text="
@string/hello"
/>
Button
android:
id="
@+id/btn_listen"
@string/btn_listen"
/>
@+id/tv_01"
@+id/tv_02"
/LinearLayout>
该实例的资源文件strings.xml的内容如下:
resources>
stringname="
hello"
使用GPS获取位置信息<
/string>
app_name"
GPSLocation<
btn_listen"
获取GPS信息<
/resources>
在Manifest文件中添加相应的权限:
manifestxmlns:
package="
introduction.android.gpsLocation"
versionCode="
1"
versionName="
uses-sdkandroid:
minSdkVersion="
8"
application
icon="
@drawable/ic_launcher"
label="
@string/app_name"
activity
.GPSLocationActivity"
intent-filter>
actionandroid:
android.intent.action.MAIN"
categoryandroid:
android.intent.category.LAUNCHER"
/intent-filter>
/activity>
/application>
/manifest>
主Activity文件GPSLocationActivity.java的代码如下:
importandroid.content.Context;
importandroid.location.Location;
importandroid.location.LocationListener;
importandroid.util.Log;
publicclassGPSLocationActivityextendsActivity{
privateButtonbtn_listen;
privateTextViewtv_01,tv_02;
btn_listen=(Button)findViewById(R.id.btn_listen);
tv_01=(TextView)findViewById(R.id.tv_01);
tv_02=(TextView)findViewById(R.id.tv_02);
btn_listen.setOnClickListener(newOnClickListener(){
@Override
LocationManagerlocationManager=(LocationManager)GPSLocationActivity.this.getSystemService(Context.LOCATION_SERVICE);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,0,0,newMyLocationListener());
//TODOAuto-generatedmethodstub
Log.i("
GpsLocation"
"
provider被关闭!
);
provider被开启!
provider状态发生改变!
由以上代码可见,LocationListener用于接收位置发生改变时的通知。
当Provider提供的位置信息发生改变时,onLocationChanged方法会被调用。
当不需要使用LocationListener进行位置更新时,可以LocationManager的removeUpdates(LocationListener)方法将其移除。
8.2传感器
大部分Android设备都带有传感器,传感器可以检测到设备的运动、方位以及周围环境因素的变化,从而给应用程序的功能带来更多可能性。
例如:
一个游戏可以不用触摸屏幕,而仅需要倾斜,晃动或摇摆手机就可以对游戏进行控制;
一个与天气相关的程序可以报告及时的温度和湿度情况;
一个旅游相关的程序可以根据地磁和加速度模拟一个罗盘。
8.2.1Android传感器简介
总的来讲,传感器可以分为三大类:
●运动传感器:
与三维空间中的运动相关的传感器,包括加速度传感器、重力传感器、陀螺仪和旋转向量传感器等