记录-Android根据手机gps或者网络获取当前位置

如果应用需要定位城市,可以这么做:

      先获取LocationManager 然后根据可用的位置提供器获取Location,代码如下

      private LocationManager locationManager;  

      private static Location location
      private String locationProvider;
      private boolean flag=false;

      /** 定位 */
      private void GetLocation(){


       //获取地理位置管理器  
        locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);  


        //获取所有可用的位置提供器  
        List<String> providers = locationManager.getProviders(true);  


        if(providers.contains(LocationManager.GPS_PROVIDER)){  

            //如果是GPS  
            locationProvider = LocationManager.GPS_PROVIDER;  

        }else if(providers.contains(LocationManager.NETWORK_PROVIDER)){  
            //如果是Network  
            locationProvider = LocationManager.NETWORK_PROVIDER;  
        }else{  
        //没有可用
        }  


        //获取Location  
        location = locationManager.getLastKnownLocation(locationProvider);  


        //可查看是否授权获取定位信息
        flag = Settings.Secure.getInt(context.getContentResolver(), Settings.Secure.ALLOW_MOCK_LOCATION, 0) != 0;


        //在更新检测后,才去获取地理位置
       if(location!=null){  
           //不为空,获取地理位置经纬度  
         GetCity(location);  
       }else{


        }
        //监视地理位置变化 --不需要用到
//        locationManager.requestLocationUpdates(locationProvider, 3000, 1, locationListener); 
}


       /** 
     * 显示地理位置经度和纬度信息 
     * @param location 
     */  
    private  void GetCity(Location location){ 


    String cit=null;
    //当location对象不为空-获取位置之后--获取页面数据
    if(location!=null){

           String latLongString = null;  
            String locationStr = "维度:" + location.getLatitude() +"\n"   
                    + "经度:" + location.getLongitude(); 
            System.out.println("经纬度 "+locationStr);
            List<Address> addList = null;  
            Geocoder ge = new Geocoder(context);  
            try {  
            //根据经纬度-获取地理位置
                addList = ge.getFromLocation(location.getLatitude(), location.getLongitude(),1);  
            } catch (IOException e) {  
                e.printStackTrace();  
            }  
            if(addList!=null && addList.size()>0){  
                for(int i=0; i<addList.size(); i++){  
                    Address ad = addList.get(i);  
                    //获取城市
                    latLongString = ad.getLocality();  
                }  
            }  
            if(latLongString!=null){
            //截取城市名
            String GlobalVariable.City=latLongString.substring(0, latLongString.indexOf("市"));            
                System.out.println("当前位置 "+GlobalVariable.City);
             
//                }
            }
    }else{
     //当用户拒绝定位权限时进行其他操作


    }
   
    }

    /** 
     * LocationListern监听器 
     * 参数:地理位置提供器、监听位置变化的时间间隔、位置变化的距离间隔、LocationListener监听器 
     */  
    LocationListener locationListener =  new LocationListener() {  
          
        @Override  
        public void onStatusChanged(String provider, int status, Bundle arg2) {  
              
        }  
          
        @Override  
        public void onProviderEnabled(String provider) {  
              
        }  
          
        @Override  
        public void onProviderDisabled(String provider) {  
              
        }  
          
        @Override  
        public void onLocationChanged(Location location) {  
            //如果位置发生变化,重新显示  
            GetCity(location);  
        }  
    };  

   



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值