1、根据criteria返回最合适的LocationProvidergetLastKnownLocation(provider)根据provider获得最新位置信息getProvider(name)根据名字获得LocationProvidergetProviders(enabledOnly)获得可用的LocationProvider列表requestLocationUpdates(provider,minTime, minDistance, listener)通过给定的Provider名称,并将其绑定指定的LocationListener监听器GPS_PROVIDER静态字符串常量,表明Locat
2、ionProvider是GPSNETWORK_PROVIDER静态字符串常量,表明LocationProvider是网络表8-1 LocationManager类的常用方法8.1.3 LocationProvider介绍 LocationProvider用来描述位置提供者,设置位置提供者的一些属性。可以通过Criteria类来为LocationProvider设置条件,获得合适的LocationProvider。表8-2列出了LocationProvider的常用方法和属性。AVAILABLE静态整型常量,标示是否可利用OUT_OF_SERVICE静态整型常量,不在服务区TEMPORAILY_
3、UNAVAILABLE静态整型常量,临时不可利用getAccuarcy()获得精度getName()获得名称getPowerRequirement()获得电源需求hasMonetaryCost()花钱的还是免费的requiresCell()是否需要访问基站网络requiresNetWork()是否需要Intent网络数据requiresSatelite()是否需要访问卫星表8-2 LocationProvider的常用方法和属性 LocationProvider中最常用的两个是GPS_PROVIDER和NETWORK_PROVIDER,就是前文提到过的GPS定位和网络定位两种方式。使用下面代码
4、可以获取系统所有的LocationProvider名称:package introduction.android.gpsLocation;import java.util.List;import android.app.Activity;import android.location.LocationManager;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget
5、.TextView;public class GooglemapActivity extends Activity /* Called when the activity is first created. */ Button button; TextView textview; LocationManager manager; Override public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.main); button=(Bu
6、tton)findViewById(R.id.btn_listen); textview=(TextView)findViewById(R.id.tv_01); manager=(LocationManager)getSystemService(LOCATION_SERVICE);/获取系统location服务 button.setOnClickListener(new OnClickListener() Override public void onClick(View v) /获取系统所有的LocationProvider名称 List list=manager.getAllProvide
7、rs(); String t=; for (int i = 0; i list.size(); i+) t+=list.get(i)+n textview.setText(t); ); Criteria类可以设置一系列的查询条件,用于查找当前设备当中符合条件的LocationProvider,下面的代码片段展示了Criteria类的一般用法: Criteria c = new Criteria(); c.setAccuracy(Criteria.ACCURACY_FINE); /精度高 c.setPowerRequirement(Criteria.POWER_LOW); /电量消耗低 c.se
8、tAltitudeRequired(false); /不需要海拔 c.setSpeedRequired(false); /不需要速度 c.setCostAllowed(false); /不需要费用 String provider = locationManager.getBestProvider(c, false); /false是指不管当前适配器是否可用 System.out.println(provider);Location类Location类用于描述当前设备的地理位置信息,包括了经纬度、方向、高度和速度等。可以通过LocationManager.getLastKnownLocation
9、(String provider)方法可以获得Location实例。其常用方法见表8-3。public float getAccuracy ()获得精确度public double getAltitude ()获得高度public float getBearing ()获得方向public double getLatitude ()获取经度public double getLongitude ()获得纬度public float getSpeed ()获得速度表8-3 Location类的常用方法 Location的典型应用见下面的代码片段: Location location = locat
10、ionManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); double latitude = location.getLatitude(); /经度 double longitude = location.getLongitude(); /纬度 double altitude = location.getAltitude(); /海拔8.1.4 使用GPS获取当前位置信息使用GPS获取用户当前位置,一般需要以下几个步骤:1)在Manifest文件中声明权限: uses-permission android:name=andro
11、id.permission.ACCESS_FINE_LOCATION/- 使用网络定位需要以下权限 -android.permission.ACCESS_COARSE_LOCATION 2)获取LocationManager对象:locationManager=(LocationManager)getSystemService(Context.LOCATION_SERVICE); 3)选择一个合适的LocationProvider,并注册一个周期性的位置更新:locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
12、0,0,new MyLocationListener(); 4)实现LocationListener接口,获取位置信息: class MyLocationListener implements LocationListener Override public void onLocationChanged(Location location) tv_01.setText(您当前位置的经度为:+location.getLongitude(); tv_02.setText(您当前位置的纬度为:+location.getLatitude(); public void onProviderDisable
13、d(String provider) /当provider被用户关闭时调用 public void onProviderEnabled(String provider) /当provider被用户开启后调用 public void onStatusChanged(String provider, int status, Bundle extras) /当provider的状态在OUT_OF_SERVICE、TEMPORARILY_UNAVAILABLE和AVAILABLE之间发生变化时调用 实例GPSLocation演示了使用GPS获取用户位置信息的过程,运行效果如图8-1所示。图8-1 实例
14、GPSLocation的运行效果 由于模拟器没有真正的GPS硬件,所以需要在DDMS中模拟GPS服务,图8-2展示了再Emulator Control面板上手动发送经纬度信息来测试位置服务。图8-2 Emulator Control面板 下面是实例GPSLocation的主界面布局文件main.xml的代码:LinearLayout xmlns:android= android:orientation=verticallayout_width=fill_parentlayout_height= TextView wrap_contenttext=string/hello /Button and
15、roid:id=+id/btn_listenstring/btn_listen /+id/tv_01+id/tv_02/LinearLayout 该实例的资源文件strings.xml的内容如下:resourcesstring name=hello使用GPS获取位置信息app_nameGPSLocationbtn_listen获取GPS信息在Manifest文件中添加相应的权限:manifest xmlns: package=introduction.android.gpsLocationversionCode=1versionName=uses-sdk android:minSdkVersi
16、on=8applicationicon=drawable/ic_launcherlabel=string/app_nameactivity.GPSLocationActivityintent-filter action android:android.intent.action.MAINcategory android:android.intent.category.LAUNCHER/intent-filter/activity/application/manifest 主Activity文件GPSLocationActivity.java的代码如下:import android.conten
17、t.Context;import android.location.Location;import android.location.LocationListener;import android.util.Log;public class GPSLocationActivity extends Activity private Button btn_listen; private TextView tv_01,tv_02; btn_listen=(Button) findViewById(R.id.btn_listen); tv_01=(TextView) findViewById(R.id
18、.tv_01); tv_02=(TextView) findViewById(R.id.tv_02); btn_listen.setOnClickListener(new OnClickListener() Override LocationManager locationManager=(LocationManager) GPSLocationActivity.this.getSystemService(Context.LOCATION_SERVICE); locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
19、 0, 0,new MyLocationListener(); / TODO Auto-generated method stub Log.i(GpsLocation,provider被关闭!);provider被开启!provider状态发生改变! 由以上代码可见,LocationListener用于接收位置发生改变时的通知。当Provider提供的位置信息发生改变时,onLocationChanged方法会被调用。当不需要使用LocationListener进行位置更新时,可以LocationManager的removeUpdates(LocationListener)方法将其移除。8.2 传感器大部分Android设备都带有传感器,传感器可以检测到设备的运动、方位以及周围环境因素的变化,从而给应用程序的功能带来更多可能性。例如:一个游戏可以不用触摸屏幕,而仅需要倾斜,晃动或摇摆手机就可以对游戏进行控制;一个与天气相关的程序可以报告及时的温度和湿度情况;一个旅游相关的程序可以根据地磁和加速度模拟一个罗盘。8.2.1 Android传感器简介总的来讲,传感器可以分为三大类: 运动传感器:与三维空间中的运动相关的传感器,包括加速度传感器、重力传感器、陀螺仪和旋转向量传感器等
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1