Android地图地理信息定位服务(一)

本文介绍了Android地图地理信息定位服务的基础知识,包括如何设置模拟器支持定位,解析GPX和KML数据格式,使用LocationManager和LocationProviders获取定位信息,以及设置位置变化监听和邻近警告。此外,还强调了权限需求和电源管理的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

地图和定位服务用经纬度来精确指出地理位置,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);
  • 跟踪运动(TrackingMovement)
    •  使用requestLocationUpdates方法取得最新的位置变化。为优化性能可指定位置变化的最小时间(毫秒)和最小距离(米)。当超出最小时间和距离值时,Location Listener将触发onLocationChanged事机。
      locationManager.requestLocationUpdates(provider,t, distance,myLocationListener);
    • 用RomoveUpdates方法停止位置更新
    • 大多数GPS硬件都明显地消耗电能。
  • 邻近警告(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);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值