您的位置:首页 > 理论基础 > 计算机网络

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

2016-08-24 09:50 417 查看
如果应用需要定位城市,可以这么做:

      先获取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);  

        }  

    };  


   
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息