android 定位服务
16lz
2021-12-04
使用的类
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 获得最适合的LocationProviderCriteria 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() {@Overridepublic void onStatusChanged(String provider, int status, Bundle extras) {// TODO Auto-generated method stub}@Overridepublic void onProviderEnabled(String provider) {// TODO Auto-generated method stub}@Overridepublic void onProviderDisabled(String provider) {// TODO Auto-generated method stub}//位置发生改变时,@Overridepublic void onLocationChanged(Location location) {// TODO Auto-generated method stubdouble 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); //根据地址名获取
更多相关文章
- 箭头函数的基础使用
- NPM 和webpack 的基础使用
- Python list sort方法的具体使用
- 【阿里云镜像】使用阿里巴巴DNS镜像源——DNS配置教程
- [APP] Android(安卓)开发笔记 006-使用短信验证SDK进行短信验证
- Android(安卓)之 下拉框(Spinner)的简单使用
- Android(安卓)Q 电量使用图分析 show app usage
- 【Android(安卓)volley】Android库Volley的使用介绍
- Titanium 使用刘明星的Jpush module做android端的消息推送