(一)选择位置提供器:
1、调用getProvider,并传递名称:
LocationManager locationManager = (LocationManager)getSystemService(LocationManager.LOCATION_SERVICE) ;
LocationProvider gpsProvider = locationManager.getProvider(providerName) ;
2、大部分都不可能显示的选择位置提供器,通常是指定要求,让Android确定使用最优技术:
Criteria criteria = new Criteria() ;
criteria.setAccuracy(Criteria.ACCURACY_COARSE) ;
criteria.setPowerRequirement(Crteria.POWER_LOW) ;
criteria.setAltitudeRequired(flase) ;
criteria.setBearingRequired(false) ;
criteria.setSpeedRequired(false) ;
criteria.setCostAllowed(true) ;
String bestProvider = locationManager.getBestProvider(criteria) ;
如果有多个符合标准,返回精度最高的;如果没有满足的,按能耗、精度、返回能力放宽标准;如果不能找到,返回null。
(二)实时追踪移动
1、创建监听器
private final LocationListener locationListener = new LocationListener(){
public void onLocationChanged(Location location) {
//根据新的位置改变时触发
}
public void onProviderDisabled(String provider) {
//禁用位置提供器时触发
}
public void onProviderEnabled(String provider) {
//启动了位置提供器时触发
}
public void onStatusChanged(String provider, int status, Bundle extras) {
//提供器硬件状态发生改变时触发
}
} ;
2、调用方法添加监听器
//provider:指定提供器名、t:更新最短时间、distance:更新最短距离:监听器
locationManager.requestLocationUpdates(provider,t,distance,locationListener) ;
(三)邻近提醒
指定一个覆盖区域设置邻近提醒,设置选择中心点、距离半径、提醒的超时值,则不管移进/移出都会提醒。
1、使用PendingIntent指定触发的意图
2、使用LocationManager设置邻近提醒
PendingIntent pi = PendingIntent.getBroadcast(this,-1,(new Intent(ACTION)),0) ;
//lat,lng:中心点坐标;radius:半径;expiration:过去值,-1为永不过期;pi:设定处理
locationManager.addProximityAlert(lat,lng,radius,expiration,pi) ;
3、邻近提醒处理(存在一个key为LocationManager.KEY_PROXIMITY_ENTERING的值表示移入/移出(true/false)):
boolean entering = getIntent().getBooleanExtra(LocationManager.KEY_PROXIMITY_ENTERING) ;
//各项操作处理......
(四)地理编码器
ForWard Geocoding(前向地理编码):查找地址的经纬度;(getFromLocation)
Receverse Geocoding(反向地理编码:查找给定经纬度对应的街道地址。(getFromLocationName)
两种地理编码函数返回的都是一组Address对象列表(List<Address>);Address包含经纬度、电话号码、国家街道到门牌号等详细信息,需要Internet权限。
(五)地图活动
1、简介
MapView:实际使用的MapView控件;
MapActivity:新建活动的基础类,包含一个MapMap;
Overlay:用来对地图做注释的类;
MapController:用来控制地图;
MyLocationOrlaye:特殊的覆盖,用来显示设备当前的位置和方向。
ItemizedOrlays和OverlayeItems:结合使用创建地图标志图层,使用带文本的Drowable进行显示。
2、创建基于地图的活动
使用uses-library标签包含需要的库:<uses-library android:name="com.google.android.maps" />
需要INTERNET权限:<uses-permission android:name="android.permission.INTERNET">
MapView控件只能在MapActivity扩展活动中使用。
地图的对象表示为GeoPoint对象,包含了以micodegree为单位的经纬度(乘以100000即为microdegree单位)
Double geoLat = location.getLatitude()*1E6 ;
Double geoLng = location.getLongitude()*1E6 ;
GeoPoint point = new GeoPoint(geoLat.intValue(),geoLng.intValue()) ;
mapView.getController().animateTo(point) ;