首先我们先了解一下android自带的一个位置的类,这个类可以帮助我们实现获取目前手机所在的经纬度等一系列信息
1、android自带的一个位置类LocationManager
首先先定义一个LocationManager和一个当前正在使用的位置提供器(GPS还是网络)
private LocationManager locationManager;
private String locationProvider;
然后获取位置服务
locationManager = (LocationManager) getSystemService(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);
return;
}
如果有位置提供器,那么就获取Location
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return;
}
Location location = locationManager.getLastKnownLocation(locationProvider);
if (location != null) {
//不为空,显示地理位置经纬度
showLocation(location);
}
//监视地理位置变化
locationManager.requestLocationUpdates(locationProvider, 3000, 1, locationListener);
接下来是LocationListern监听器:
/**
* 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) {
//如果位置发生变化,重新显示
showLocation(location);
}
};
最后是一个打印的方法showLocation:
private void showLocation(Location location) {
Log.debug(“定位成功------->”,"location------>" + "经度为:" + location.getLatitude() + "\n纬度为" + location.getAltitude());
}
到此就是不使用第三方地图来获取当前经纬度
公众号:Android技术经验分享
网友评论