用户定位介绍及实例

1.UserLocation
  1)获取用户的位置
  2)追踪用户的移动
2.UserLocation的API
   LocationManager:管理用户定位服务
   LocationProviders:其他的定位方式
   定位的分类(前两者是主要的):
   a.GPS定位(精确)
   b.NETWORK定位(粗糙)
   c.passive(被动)
   步骤:
   a.在主配置文件中声明相应的权限
   <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
   b.获取LocationManager对象
   c.选择LocationProvider
   d.绑定LocationListener对象
      获得的是经纬度
      location.getLongitude()//经度
      location.getLatitude()//纬度
    演示用DDMS来模拟
3.Criteria的使用(查找最好的定位方式)
  设置一些列的查询条件,用于查找当前设备中符合条件的LocationProvider
   setAccuracy()//设置精度 
   setAltitudeRequired()//是否需要设置海拔
   setBearingRequired()//是否需要设置速度
   setCostAllowed()//设置是否产生费用
   核心代码:
             /**
                * 生成一个Criteria对象
                * 用于多条件查询
                */
        Criteria criteria = new Criteria();
        /**设置查询的精度为高精度*/
        criteria.setAccuracy(Criteria.ACCURACY_FINE);
        /**设置耗电量*/
        criteria.setPowerRequirement(Criteria.POWER_LOW);
        /**设置是否需要海拔*/
        criteria.setAltitudeRequired(false);
        /**设置是否需要速度*/
        criteria.setSpeedRequired(false);
        /**设置是否需要收费*/
        criteria.setCostAllowed(false);
        /**
         * false是不关乎是否有provider打开
         * 只按条件查找最合适的
         */
        String provider = locationManager.getBestProvider(criteria,false);
4.Geocoding服务的介绍
1)主要提供的是两个功能:
a.查询某地址的经纬度
b.查询某经纬度的具体地址
获得方式1:核心类GeoCoder
核心方法:
getFromLocation()
getFromLocationName()
获得方式2:实现用户定位的另外一种方式GeoCoding(从google官网获得)
基于web的GeoCoder,在google的API中可以直接查询,查询的格式是json
步骤:
a.http://code.google.com/intl/zh-C ... entation/geocoding/
b.通过http请求也可以实现定位
地址解析请求(google网站上摘下的):
    Google Geocoding API 请求必须采用以下形式:
    http://maps.google.com/maps/api/geocode/output?parameters
    其中,output 可以是以下值之一:
    json(建议)表示以 JavaScript 对象表示法 (JSON) 的形式输出
    xml 表示以 XML 的形式输出
    有些参数是必需的,有些是可选的。根据网址的标准,所有参数均使用字符 & (&) 分隔。下面枚举了这些参数及其可能的值。
    Google Geocoding API 使用以下网址参数定义地址解析请求:
    address(必需)- 您要进行地址解析的地址。*
    或者
    latlng(必需)- 您希望获取的、距离最近的、可人工读取地址的纬度/经度文本值。*
    bounds(可选)- 要在其中更显著地偏移地址解析结果的可视区域的边框。(有关详细信息,请参见下文的可视区域偏向。)
    region(可选)- 区域代码,指定为 ccTLD(“顶级域”)双字符值。(有关详细信息,请参见下文的区域偏向。)
    language(可选)- 传回结果时所使用的语言。请参见支持的区域语言列表。请注意,我们会经常更新支持的语言,因此该列表可能并不详尽。如果未提供 language,地址解析器将尝试尽可能使用发送请求的区域的本地语言。
    sensor(必需)- 指示地址解析请求是否来自装有位置传感器的设备。该值必须为 true 或 false。
    请注意:您可以传递 address 或 latlng 进行查找。(如果传递 latlng,则地址解析器执行反向地址解析。有关详细信息,请参阅反向地址解析。)
    bounds 和 region 参数只会影响地址解析器返回的结果,但不能对其进行完全限制。
    例如北京(输出如下):
    方式1:json格式
    比如:http://maps.google.com/maps/api/ ... NG&sensor=false
    {
   "results" : [
      {
         "address_components" : [
            {
               "long_name" : "北京",
               "short_name" : "北京",
               "types" : [ "locality", "political" ]
            },
            {
               "long_name" : "北京市",
               "short_name" : "北京市",
               "types" : [ "administrative_area_level_1", "political" ]
            },
            {
               "long_name" : "中国",
               "short_name" : "CN",
               "types" : [ "country", "political" ]
            }
         ],
         "formatted_address" : "中国北京市",
         "geometry" : {
            "bounds" : {
               "northeast" : {
                  "lat" : 40.21649620,
                  "lng" : 116.78298350
               },
               "southwest" : {
                  "lat" : 39.66127140,
                  "lng" : 116.01193430
               }
            },
            "location" : {
               "lat" : 39.9042140,
               "lng" : 116.4074130
            },
            "location_type" : "APPROXIMATE",
            "viewport" : {
               "northeast" : {
                  "lat" : 40.21649620,
                  "lng" : 116.78298350
               },
               "southwest" : {
                  "lat" : 39.66127140,
                  "lng" : 116.01193430
               }
            }
         },
         "types" : [ "locality", "political" ]
      }
   ],
   "status" : "OK"
}
   方式2:xml格式
<GeocodeResponse>
<status>OK</status>
<result>
<type>locality</type>
<type>political</type>
<formatted_address>中国北京市</formatted_address>
<address_component>
<long_name>北京</long_name>
<short_name>北京</short_name>
<type>locality</type>
<type>political</type>
</address_component>
<address_component>
<long_name>北京市</long_name>
<short_name>北京市</short_name>
<type>administrative_area_level_1</type>
<type>political</type>
</address_component>
<address_component>
<long_name>中国</long_name>
<short_name>CN</short_name>
<type>country</type>
<type>political</type>
</address_component>
<geometry>
<location>
<lat>39.9042140</lat>
<lng>116.4074130</lng>
</location>
<location_type>APPROXIMATE</location_type>
<viewport>
<southwest>
<lat>39.6612714</lat>
<lng>116.0119343</lng>
</southwest>
<northeast>
<lat>40.2164962</lat>
<lng>116.7829835</lng>
</northeast>
</viewport>
<bounds>
<southwest>
<lat>39.6612714</lat>
<lng>116.0119343</lng>
</southwest>
<northeast>
<lat>40.2164962</lat>
<lng>116.7829835</lng>
</northeast>
</bounds>
</geometry>
</result>
</GeocodeResponse>
原文地址:https://www.cnblogs.com/renyuan/p/2553951.html