常用方法:
xml文件的配置
- <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
- <uses-permission android:name="android.permission.INTERNET" />
- <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
这个方法返回值是经纬度的组合字符串 组合格式Latitude + "-" + Longitude;,如有需要可以自行修改
private String getLocal() {
locationManager = (LocationManager) getActivity().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(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