android 定位服务

使用的类

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); //根据地址名获取




你可能感兴趣的:(android,json,String,list,manager,service)