Android学习笔记 - 定位篇 (Location)

来源:互联网 发布:淘宝牛排哪个牌子好 编辑:程序博客网 时间:2024/06/18 11:08

1.UserLocation能做什么
  1.获取用户的位置
  2.追踪用户的移动
 
2.UserLocation的关键API
  1.LocationManager:用于管理Android用户定位服务
  2.LocationProviders:提供多种定位方式供开发者选择

 

3.定位方式的分类
  1.GPS定位,使用GPS卫星进行定位
    <uses-permission android:name="android.permission.ACCESS_FIND_LOCATION" />
 
  2.Network定位,使用信号接收塔和WIFI接入点进行定位,
    <uses-permission android:name="android.permission.ACCESS_FIND_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

 

4.获取用户的当前位置
  1.在AndroidManifest.xml当中声明相应的权限
  2.获取LocationManager对象
  3.选择LocationProvider
  4.绑定LocationListener对象

[java] view plaincopy
  1. LocationManager locationManager = (LocationManager)MainActivity.this.getSystemService(Context.LOCATION_SERVICE);  
  2. locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 00new TestLocationListener());  
  3.   
  4. private class TestLocationListener extend LocationListener{  
  5.   @Override  
  6.   public void onLocationChanged(Location location){  
  7.     //当位置发生改变时调用  
  8.     System.out.println(location.getLongitude() + "|" + location.getLititude());  
  9.   }  
  10.     
  11.   @Override  
  12.   public void onProviderDisabled(String provider){  
  13.     //当适配器禁用时调用  
  14.   }  
  15.     
  16.   @Override  
  17.   public void onProviderEnabled(String provider){  
  18.     //当适配器有效时调用  
  19.   }  
  20.     
  21.   @Override  
  22.   public void onStatusChanged(String provider){  
  23.     //当状态改变时调用  
  24.   }  
  25. }  

 

5.获取最佳的Location Provider
  1.获取当前设备所有的适配器

[java] view plaincopy
  1. LocationManager locationManager = (LocationManager)MainActivity.this.getSystemService(Context.LOCATION_SERVICE);  
  2. List<String providers = locationManager.getAllProviders();  
  3. for(Iterator iterator = providers.iterator(); iterator.hasNext()){  
  4.   System.out.println(iterator.next());  
  5. }  


  
  2.寻找最佳的适配器
  Criteria可以设置一系列的查询条件,用于查找当前设备当中符合条件的LocationProvider
  详细看ADK中的说明文档 Criteria

[java] view plaincopy
  1. Criteria c = new criteria();  
  2. c.setAccuracy(Criteria.Accuracy_FINE); //精度高  
  3. c.setPowerRequirement(Criteria.POWER_LOW); //电量消耗低  
  4. c.setAltitudeRequired(false); //不需要海拔  
  5. c.setSpeedReuquired(false); //不需要速度  
  6. c.setCostAllowed(false); //不需要费用  
  7. String provider = locationManager.getBestProvider(criteria, false); //false是指不管当前适配器是否可用  
  8. System.out.println(provider);  


6.追踪用户的位置
  locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 2000, 1000, new TestLocationListener());
  第二个参数minTime: 两次定位用户位置的最小间隔时间(毫秒)
  第三个参数minDistance: 两次定位用户位置的最小距离(米)

 

7.Geocoding介绍
  GeoCoding是Google所提供的一项服务,主要有以下两个方面的功能
  1.查询某地址的经纬度
  2.查询某经纬度的具体地址


8.Android当中的Geocoder
  1.创建一个GeoCoder对象
  2.调用该对象的getFromLocation()或getFromLocationName()方法

[java] view plaincopy
  1. Geocoder gc = new Geocoder(MainActivity.this);  
  2. List<Address> address = geocoder.getFromLocationName("SFO"1); //最大结果  
  3. System.out.println(addrss.size());  
  4.   
  5. List<Address> address = geocoder.getFromLocationName(12.3456.781); //最大结果  
  6. System.out.println(address.size());  


 
9.Geocoder的替代方法
  地址:
http://code.google.com/intl/zh-CN/apis/maps/documentation/geocoding/
 
  根据地址获取经纬度(sensor:是否来自设备传感器)
 
http://maps.googleapis.com/maps/api/geocode/json?address=SFO&sensor=false
  http://maps.googleapis.com/maps/api/geocode/xml?address=SFO&sensor=false
 
  根据经纬度获取地址
 
http://maps.googleapis.com/maps/api/geocode/json?latlng=12.34,56.78&sensor=false
 
  根据地址和区域范围的经纬度
 
http://maps.googleapis.com/maps/api/geocode/json?address=SFO&sensor=false&bounds=12.34,56.78|87.65,43.21
 
  根据国家代码
 
http://maps.googleapis.com/maps/api/geocode/json?address=SFO&sensor=false&region=es

 

 

原创粉丝点击