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

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对象

  1. LocationManagerlocationManager=(LocationManager)MainActivity.this.getSystemService(Context.LOCATION_SERVICE);
  2. locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,0,0,newTestLocationListener());
  3. privateclassTestLocationListenerextendLocationListener{
  4. @Override
  5. publicvoidonLocationChanged(Locationlocation){
  6. //当位置发生改变时调用
  7. System.out.println(location.getLongitude()+"|"+location.getLititude());
  8. }
  9. @Override
  10. publicvoidonProviderDisabled(Stringprovider){
  11. //当适配器禁用时调用
  12. }
  13. @Override
  14. publicvoidonProviderEnabled(Stringprovider){
  15. //当适配器有效时调用
  16. }
  17. @Override
  18. publicvoidonStatusChanged(Stringprovider){
  19. //当状态改变时调用
  20. }
  21. }

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

  1. LocationManagerlocationManager=(LocationManager)MainActivity.this.getSystemService(Context.LOCATION_SERVICE);
  2. List<Stringproviders=locationManager.getAllProviders();
  3. for(Iteratoriterator=providers.iterator();iterator.hasNext()){
  4. System.out.println(iterator.next());
  5. }



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

  1. Criteriac=newcriteria();
  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. Stringprovider=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()方法

  1. Geocodergc=newGeocoder(MainActivity.this);
  2. List<Address>address=geocoder.getFromLocationName("SFO",1);//最大结果
  3. System.out.println(addrss.size());
  4. List<Address>address=geocoder.getFromLocationName(12.34,56.78,1);//最大结果
  5. 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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值