地图和定位服务用经纬度来精确指出地理位置,Android 提供了一个地理编码Geocoder来转换经纬度和现实世界的地址
- 设置模拟器以支持定位服务(LBS: Location-based service)
- GPS数据格式GPX和KML, GPX是一个XML格式文件,为应用软件设计的通用的GPS数据格式.它可用来描述路点,轨迹和路程.KML,是基于XML(eXtensible MarkupLanguage,可扩展标记语言)语法标准的一种标记语言(markup language),采用标记结构,含有嵌套的元素和属性。由Google(谷歌)旗下的Keyhole公司发展并维护,用来表达地理标记。
- LBS是一个总称,用来描述用于找到设备当前位置的不同技术。主要有两个元素
- locationManager用于提供LBS的钩子hook,获得当前位置,跟踪移动,设置移入和移出指定区域的接近警报
- LocationProviders其中的每一个都代表不同的用于确定设备当前位置的位置发现技术, 两个常用的Providers GPS_PROVIDER和 NETWORK_PROVIDER
String providerName =LocationManager.GPS_PROVIDER;LocationProvidergpsProvider;
gpsProvider =locationManager.getProvider(providerName);
- 在Eclipse的DDMS->Location Controls可设置位置变化数据用于测试用于。使用ManualTab,可以指定特定的纬度/经度对。另外,KML和GPX可以载入KML和GPX文件。一旦加载,可以跳转到特定的航点(位置)或顺序播放每个位置。
- 可用Criteria类设置条件查询(精度=精确/粗略,能耗=高/中/低,成本,返回海拔,速度,方位置的能力)符合要求的provider。
Criteria criteria = newCriteria();
criteria.setAccuracy(Criteria.ACCURACY_COARSE);
criteria.setPowerRequirement(Criteria.POWER_LOW);
criteria.setAltitudeRequired(false);
criteria.setBearingRequired(false);
criteria.setSpeedRequired(false);
criteria.setCostAllowed(true);
String bestProvider = locationManager.getBestProvider(criteria, true);//或者用getProviders返回所有可能匹配的Provider。List<String>matchingProviders = locationManager.getProviders(criteria,false);
- 在使用LocationManager前需要将uses-permission加到manifest中以支持访问LBS硬件。 GPS要求finepermission, Network要求coarsepermission
<uses-permissionandroid:name=”android.permission.ACCESS_FINE_LOCATION”/>
<uses-permissionandroid:name=”android.permission.ACCESS_COARSE_LOCATION”/> - 用GetLastKnownLocation方法获得最新的位置。
String provider =LocationManager.GPS_PROVIDER;
Location location = locationManager.getLastKnownLocation(provider);
- 在使用LocationManager前需要将uses-permission加到manifest中以支持访问LBS硬件。 GPS要求finepermission, Network要求coarsepermission
- 跟踪运动(TrackingMovement)
- 使用requestLocationUpdates方法取得最新的位置变化。为优化性能可指定位置变化的最小时间(毫秒)和最小距离(米)。当超出最小时间和距离值时,Location Listener将触发onLocationChanged事机。
locationManager.requestLocationUpdates(provider,t, distance,myLocationListener); - 用RomoveUpdates方法停止位置更新
- 大多数GPS硬件都明显地消耗电能。
- 使用requestLocationUpdates方法取得最新的位置变化。为优化性能可指定位置变化的最小时间(毫秒)和最小距离(米)。当超出最小时间和距离值时,Location Listener将触发onLocationChanged事机。
- 邻近警告(ProximityAlerts)让运用程序设置触发器,当用户在地理位置上移动或超出设定距离时触发.
- 可用PendingIntent定义Proximity Alert触发时广播的Intent。
- 为处理proximityalert 需要创建BroadcastReceiver 并重写onReceive方法。
public classProximityIntentReceiver extends BroadcastReceiver {
@Override
public voidonReceive (Context context, Intent intent) {
String key =LocationManager.KEY_PROXIMITY_ENTERING;
Booleanentering = intent.getBooleanExtra(key, false);
[ ...perform proximity alert actions ... ]
}
}
- 启动监听,需要注册这个Receriver。
IntentFilter filter =new IntentFilter(TREASURE_PROXIMITY_ALERT);
registerReceiver(newProximityIntentReceiver(), filter);
- 启动监听,需要注册这个Receriver。