在API 22中,LocationListener接口已经被标记为过时。取而代之的是使用FusedLocationProviderClient类来获取设备的位置信息。以下是一个解决方案的代码示例:
首先,确保在build.gradle文件中添加以下依赖项:
implementation 'com.google.android.gms:play-services-location:17.0.0'
然后,创建一个FusedLocationProviderClient对象:
private FusedLocationProviderClient fusedLocationClient;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
fusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
}
接下来,可以使用getLastLocation()方法来获取设备的最后已知位置:
fusedLocationClient.getLastLocation()
.addOnSuccessListener(this, new OnSuccessListener() {
@Override
public void onSuccess(Location location) {
if (location != null) {
// 处理位置信息
double latitude = location.getLatitude();
double longitude = location.getLongitude();
// ...
}
}
});
如果需要实时更新设备的位置信息,可以使用requestLocationUpdates()方法:
LocationRequest locationRequest = LocationRequest.create();
locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
locationRequest.setInterval(10000); // 每10秒更新一次位置
fusedLocationClient.requestLocationUpdates(locationRequest,
new LocationCallback() {
@Override
public void onLocationResult(LocationResult locationResult) {
if (locationResult != null) {
List locations = locationResult.getLocations();
if (!locations.isEmpty()) {
Location location = locations.get(0);
// 处理位置信息
double latitude = location.getLatitude();
double longitude = location.getLongitude();
// ...
}
}
}
},
Looper.getMainLooper());
记得在适当的时候停止监听位置更新:
fusedLocationClient.removeLocationUpdates(locationCallback);
以上就是在API 22中使用FusedLocationProviderClient获取设备位置信息的解决方案。
下一篇:API 23本地位置不可用。