各位看官们大家好,上一回中咱们说的例子是"波浪进度条",这一回中咱们说的例子是" 获取位置信息"。闲话休提,言归正转, 让我们一起Talk Android吧!
概念介绍
位置信息就是我们在日常生活中的位置,比如"北京市东东城区天安门广场",更加专业的名称是经度和经度。在程序中获取位置信息后可以基于位置信息来提供相关的服
务,比如地图导航,外卖推荐。本章回中我们将介绍如何获取位置信息。
实现方法
- 申请位置权限
ACCESS_FINE_LOCATION
和ACCESS_COARSE_LOCATION
和网络权限INTERNET
; - 获取LocationManager
LocationManager locationManager =
(LocationManager)getSystemService(Context.LOCATION_SERVICE);
- 获取provide,常用的2种:
GPS,NETWORK
,
List<String> locationProviders = locationManager.getProviders(true);
- 创建位置监听器并且注册监听器来监听位置变化;
locationManager.requestLocationUpdates(locationProvider,3000,1, listener);
我们通常会在注册监听器前先获取最近一次的位置信息,如果可以获取到就直接使用,否则再去注册监听器。获取最近一次位置信息的代码如下:
Location location = locationManager.getLastKnownLocation(locationProvider);
创建监听器时需要重写监听器的onLocationChanged
()方法,在该方法中可以获取位置信息:经度和纬度;
示例代码
private double [] getLongitudeAndLatitude() {
double result[] = new double[2];
LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
//默认使用GPS获取位置信息
String locationProvider = LocationManager.GPS_PROVIDER;;
List<String> locationProviders = locationManager.getProviders(true);
LocationListener listener = new LocationListener() {
@Override
public void onLocationChanged(@NonNull Location location) {
if(location == null ) {
return;
}
if(location.getProvider() == null) {
return;
}
result[0] = location.getLongitude();
result[1] = location.getLatitude();
}
@Override
public void onProviderDisabled(@NonNull String provider) {
LocationListener.super.onProviderDisabled(provider);
}
@Override
public void onProviderEnabled(@NonNull String provider) {
LocationListener.super.onProviderEnabled(provider);
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
LocationListener.super.onStatusChanged(provider, status, extras);
}
};
if(locationProviders.contains(LocationManager.GPS_PROVIDER)) {
locationProvider = LocationManager.GPS_PROVIDER;
} else if(locationProviders.contains(LocationManager.NETWORK_PROVIDER)) {
locationProvider = LocationManager.NETWORK_PROVIDER;
} else if(locationProviders.contains(LocationManager.PASSIVE_PROVIDER)) {
locationProvider = LocationManager.PASSIVE_PROVIDER;
} else if(locationProviders.contains(LocationManager.FUSED_PROVIDER)) {
locationProvider = LocationManager.FUSED_PROVIDER;
}else {
locationProvider = LocationManager.GPS_PROVIDER;
}
//获取上一次的位置信息(第一次运行时值为null)并且注册位置监听器
Location location = locationManager.getLastKnownLocation(locationProvider);
if(location != null) {
result[0] = location.getLongitude();
result[1] = location.getLatitude();
}else {
//监听位置变化,3s更新一次,位置为1m
// locationManager.requestLocationUpdates(locationProvider,3000,1, listener);
//监听位置变化,3s更新一次,太频繁,修改3分钟,位置为1m
locationManager.requestLocationUpdates(locationProvider,3*60*1000,1, listener);
}
return result;
}
上面是完整的示例代码,它和我们在实现方法中介绍的内容完全匹配,只有获取位置权限的内容没有示例代码,我们在下一章回中将介绍如何获取位置权限。
看官们,关于"获取位置信息"的例子咱们就介绍到这里,欲知后面还有什么例子,且听下回分解!