private void getLocation() { System.out.println("-!!!!!!--!!!!!------"); TelephonyManager tm = (TelephonyManager) MyApplication.getContext().getSystemService(Context.TELEPHONY_SERVICE); //1.获取位置管理器 lm = (LocationManager) MyApplication.getContext().getSystemService(Context.LOCATION_SERVICE); //2.获取位置提供器,GPS或是NetWork List<String> providers = lm.getProviders(true); if (providers.contains(LocationManager.GPS_PROVIDER)) { //如果是GPS定位 locationProvider = LocationManager.GPS_PROVIDER; System.out.println("gps"); } else if (providers.contains(LocationManager.NETWORK_PROVIDER) && (isNetworkAvailable(MyApplication.getContext()) || isWifiEnabled(MyApplication.getContext()))) { //如果是网络定位 locationProvider = LocationManager.NETWORK_PROVIDER; System.out.println("network"); } else { //没有可用的位置提供器 System.out.println("No provider"); return; } if (Build.VERSION.SDK_INT >= 23 && ActivityCompat.checkSelfPermission(MyApplication.getContext(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(MyApplication.getContext(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { return; } if (ActivityCompat.checkSelfPermission(MyApplication.getContext(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(MyApplication.getContext(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { return; } //3.获取上次的位置,一般第一次运行,此值为null Location location = lm.getLastKnownLocation(locationProvider); if (location != null) { setLocation(location); } // 监视地理位置变化,第二个和第三个参数分别为更新的最短时间minTime和最短距离minDistace lm.requestLocationUpdates(locationProvider, period, 0, locationListener); }
谨记:getLastKnownLocation方法必须与requestLocationUpdates方法在一起使用,否则location 获取的点的经纬度是重复的。