获取经纬度方法的使用以及常见问题

常用方法:

xml文件的配置

  1. <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />  
  2. <uses-permission android:name="android.permission.INTERNET" />  
  3. <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />  

这个方法返回值是经纬度的组合字符串  组合格式Latitude + "-" + Longitude;,如有需要可以自行修改

private String getLocal() {

        locationManager = (LocationManager) getActivity().getSystemService(Context.LOCATION_SERVICE);
        //获取所有可用的位置提供器
        List 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 {
            Toast.makeText(view.getContext(), "没有可用的位置提供器", Toast.LENGTH_SHORT).show();
            return "null";
        }
        //获取Location
        if (ActivityCompat.checkSelfPermission(view.getContext(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(view.getContext(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            return "未获取权限";
        }
        //不是一次就能成功的
        locl = locationManager.getLastKnownLocation(locationProvider);
        if(locl!=null){
            //不为空,显示地理位置经纬度
            locationManager.requestLocationUpdates("gps", 60000, 1, locationListener);
            Latitude = locl.getLatitude();
            Longitude = locl.getLongitude();
        }
        //监视地理位置变化
        locationManager.requestLocationUpdates(locationProvider, 3000, 1, locationListener);
        locationstr = Latitude + "-" + Longitude;
        return locationstr;
    }


然后开始码的时候发现每次第一次总是获取不到地理位置,返回值都是null-null,分析后得知原因是getLastKnownLocation这个方法用一次往往不能成功,所以在判断不为空的时候反复获取,即加上下面一句话
locationManager.requestLocationUpdates("gps", 60000, 1, locationListener);
这是从国外论坛上得到的启发

具体可见  http://stackoverflow.com/questions/1608632/android-locationmanager-getlastknownlocation-returns-null

你可能感兴趣的:(经验积累,android)