使用的类
LoactionManager 管理Android用户定位服务,由getSystemService(Context.LOCATION_SERVICE);方法获得 manager.getAllProviders();//获得机器上所有的locationprovider getLastKnownLocation() //获得当前位置的location对象,次方法经常得到null值,只需要在这个方法所在的对象,创建和销毁的地方分别注册/销毁一个LocationListener即可,比如在oncreate注册,onstop销毁,在Thread的构造注册,在run结束销毁.使用一个循环不断获得location.记得使用一个计时器来定期检查是否为null.一直为null就要销毁这个thread. requestLocationUpdates(string provider名,int 多久更新(暗示),int 多远更新,LocationListener监听器) 可以配合Criteria使用manager.getBestProvider(cr, true) 根据条件获得最适合的provider//获得最好的provider,参数1Criteria对象 参2 获得的provider是否是可用的,true只获取可用的 LocationListener 监听器类 onLocationChanged 监听当地址发生改变时触发 LocationProvider 提供多种定位方式 Criteria 设置条件,配合LocationManager 获得最适合的LocationProvider Criteria cr=new Criteria(); cr.setAccuracy(Criteria.ACCURACY_FINE); //设置精度 cr.setAltitudeRequired(false);//是否需要海拔 cr.setBearingRequired(false);//是否需要方向信息 cr.setCostAllowed(true);//是否使用wifi 等 长生流量等费用 cr.setPowerRequirement(cr.POWER_MEDIUM);//设置电量级别 GeoCoder 查询所在地址: getFromLocationName("台柳路", 1); 根据路明 返回List<Address> getFromLocation(latitude, longidute, 1); 根据进纬度 参3 得到几个结果 返回List<Address> Address 地址类 使用http查询结果 http://maps.googleapis.com/maps/api/geocode/返回方式?address=地址名&sensor=是否来自传感器&language=语言 http://maps.googleapis.com/maps/api/geocode/返回方式?latlng=经度,纬度&sensor=是否来自传感器&language=语言 返回方式:json xml language:返回数据的语言 zh为中文 sensor:true false
权限:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
1.获取:LocationMananger
LocationManager manager=(LocationManager) getSystemService(Context.LOCATION_SERVICE);2 获取最合适的provider
Criteria cr=new Criteria(); cr.setAccuracy(Criteria.ACCURACY_FINE); //设置精度 cr.setAltitudeRequired(false);//是否需要海拔 cr.setBearingRequired(false);//是否需要方向信息 cr.setCostAllowed(true);//是否使用wifi 等 长生流量等费用 cr.setPowerRequirement(cr.POWER_MEDIUM);//设置电量级别 String providertype=manager.getBestProvider(cr, true); LocationProvider provider=manager.getProvider(providertype);
3 注册监听器
manager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,0, 0,new LocationListener() { @Override public void onStatusChanged(String provider, int status, Bundle extras) { // TODO Auto-generated method stub } @Override public void onProviderEnabled(String provider) { // TODO Auto-generated method stub } @Override public void onProviderDisabled(String provider) { // TODO Auto-generated method stub } //位置发生改变时, @Override public void onLocationChanged(Location location) { // TODO Auto-generated method stub double longidute=location.getLongitude(); //经度 double latitude= location.getLatitude();//纬度 } }); } });3 获得经纬度表达的地址:
Geocoder geocoder=new Geocoder(MainActivity.this); List<Address> list=null; List<String> lists=new ArrayList<String>(); list = geocoder.getFromLocation(latitude, longidute, 1);//根据经纬度获取 list=geocoder.getFromLocationName("台柳路", 1); //根据地址名获取