android 调用gps获取经纬度的方法大同小异,实则差不了多少。但是使用起来,有的方法看起来很冗杂,而且很不好用。下面为大家介绍中很简单的方法,而且是实时监听位置的变化。
首先定义:
private Location location;
private String locationProvider;
private LocationManager locationManager;
然后再获取经纬度的时候直接调用getLocationInfo()这个方法,获取到location,就可以了。
private void getLocationInfo() {
locationManager = (LocationManager) this.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 {
Toast.makeText(this, "没有可用的位置提供器", Toast.LENGTH_SHORT).show();
return;
}
// 获取Location
Location location = locationManager.getLastKnownLocation(locationProvider);
if (location != null) {
// 不为空,显示地理位置经纬度
String jd =location.getLongitude();
String wd =location.getLatitude();
} else {
ToastUtils.showToast(this, "GPS未定位到位置");
System.out.println("GPS未定位到位置,请查看是否打开了GPS ?");
}
// 监视地理位置变化
locationManager.requestLocationUpdates(locationProvider, 2000, 1, locationListener);
}
温馨提示:在android 5.0以后除了在AndroidManifest.xml里面申请权限之外,还要在调用方法之前去动态申请定位权限。
private void requestPermission() { if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.ACCESS_COARSE_LOCATION)) { ToastUtils.showToast(this, "您已经拒绝过一次了"); } ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION}, 0); } }