Android获取所在地城市名2
16lz
2021-12-04
Android获取所在地城市名
分类:Android网络开发 2011-12-25 18:30 61人阅读 评论(0) 收藏 举报 [java] view plain copy- <spanstyle="font-size:24px;">publicclassLocationUtils{
- //publicstaticStringcityName="深圳";//城市名
- publicstaticStringcityName;//城市名
- privatestaticGeocodergeocoder;//此对象能通过经纬度来获取相应的城市等信息
- /**
- *通过地理坐标获取城市名其中CN分别是city和name的首字母缩写
- *@paramcontext
- */
- publicstaticvoidgetCNBylocation(Contextcontext){
- geocoder=newGeocoder(context);
- //用于获取Location对象,以及其他
- LocationManagerlocationManager;
- StringserviceName=Context.LOCATION_SERVICE;
- //实例化一个LocationManager对象
- locationManager=(LocationManager)context.getSystemService(serviceName);
- //provider的类型
- Stringprovider=LocationManager.NETWORK_PROVIDER;
- Criteriacriteria=newCriteria();
- criteria.setAccuracy(Criteria.ACCURACY_FINE);//高精度
- criteria.setAltitudeRequired(false);//不要求海拔
- criteria.setBearingRequired(false);//不要求方位
- criteria.setCostAllowed(false);//不允许有话费
- criteria.setPowerRequirement(Criteria.POWER_LOW);//低功耗
- //通过最后一次的地理位置来获得Location对象
- Locationlocation=locationManager.getLastKnownLocation(provider);
- Stringqueryed_name=updateWithNewLocation(location);
- if((queryed_name!=null)&&(0!=queryed_name.length())){
- cityName=queryed_name;
- }
- /*
- *第二个参数表示更新的周期,单位为毫秒;第三个参数的含义表示最小距离间隔,单位是米
- *设定每30秒进行一次自动定位
- */
- locationManager.requestLocationUpdates(provider,30000,50,
- locationListener);
- //移除监听器,在只有一个widget的时候,这个还是适用的
- locationManager.removeUpdates(locationListener);
- }
- /**
- *方位改变时触发,进行调用
- */
- privatefinalstaticLocationListenerlocationListener=newLocationListener(){
- StringtempCityName;
- publicvoidonLocationChanged(Locationlocation){
- tempCityName=updateWithNewLocation(location);
- if((tempCityName!=null)&&(tempCityName.length()!=0)){
- cityName=tempCityName;
- }
- }
- publicvoidonProviderDisabled(Stringprovider){
- tempCityName=updateWithNewLocation(null);
- if((tempCityName!=null)&&(tempCityName.length()!=0)){
- cityName=tempCityName;
- }
- }
- publicvoidonProviderEnabled(Stringprovider){
- }
- publicvoidonStatusChanged(Stringprovider,intstatus,Bundleextras){
- }
- };
- /**
- *更新location
- *@paramlocation
- *@returncityName
- */
- privatestaticStringupdateWithNewLocation(Locationlocation){
- StringmcityName="";
- doublelat=0;
- doublelng=0;
- List<Address>addList=null;
- if(location!=null){
- lat=location.getLatitude();
- lng=location.getLongitude();
- }else{
- System.out.println("无法获取地理信息");
- }
- try{
- addList=geocoder.getFromLocation(lat,lng,1);//解析经纬度
- }catch(IOExceptione){
- //TODOAuto-generatedcatchblock
- e.printStackTrace();
- }
- if(addList!=null&&addList.size()>0){
- for(inti=0;i<addList.size();i++){
- Addressadd=addList.get(i);
- mcityName+=add.getLocality();
- }
- }
- if(mcityName.length()!=0){
- returnmcityName.substring(0,(mcityName.length()-1));
- }else{
- returnmcityName;
- }
- }
- /**
- *通过经纬度获取地址信息的另一种方法
- *@paramlatitude
- *@paramlongitude
- *@return城市名
- */
- publicstaticStringGetAddr(Stringlatitude,Stringlongitude){
- Stringaddr="";
- /*
- *也可以是http://maps.google.cn/maps/geo?output=csv&key=abcdef&q=%s,%s,不过解析出来的是英文地址
- *密钥可以随便写一个key=abc
- *output=csv,也可以是xml或json,不过使用csv返回的数据最简洁方便解析
- */
- Stringurl=String.format(
- "http://ditu.google.cn/maps/geo?output=csv&key=abcdef&q=%s,%s",
- latitude,longitude);
- URLmyURL=null;
- URLConnectionhttpsConn=null;
- try{
- myURL=newURL(url);
- }catch(MalformedURLExceptione){
- e.printStackTrace();
- returnnull;
- }
- try{
- httpsConn=(URLConnection)myURL.openConnection();
- if(httpsConn!=null){
- InputStreamReaderinsr=newInputStreamReader(
- httpsConn.getInputStream(),"UTF-8");
- BufferedReaderbr=newBufferedReader(insr);
- Stringdata=null;
- if((data=br.readLine())!=null){
- String[]retList=data.split(",");
- if(retList.length>2&&("200".equals(retList[0]))){
- addr=retList[2];
- }else{
- addr="";
- }
- }
- insr.close();
- }
- }catch(IOExceptione){
- e.printStackTrace();
- returnnull;
- }
- returnaddr;
- }
- }</span>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
更多相关文章
- 【阿里云镜像】切换阿里巴巴开源镜像站镜像——Debian镜像
- Android(安卓)分组列表适配器 MyExpandableAdapter
- android截取屏幕图
- android 获取手机中的联系人
- Android动态获取当前手机IP地址
- Android获取包相关信息--code
- 获取Android系统信息
- Android(安卓)打开文件管理器 获取文件的真实路径
- Android(安卓)AGPS 定位 测试程序