gpt4 book ai didi

android - FusedLocationClient 未调用 onLocationResult

转载 作者:行者123 更新时间:2023-12-02 11:56:08 24 4
gpt4 key购买 nike

我现在正在创建一个位置客户端,目前我已经

 public void startUpdatingLocationProcess(Context context) {

parentContext = context;

if (mFusedLocationClient == null){
mFusedLocationClient = LocationServices.getFusedLocationProviderClient(parentContext);

LocationRequest mLocationRequest = new LocationRequest();
mLocationRequest.setInterval(5000);
mLocationRequest.setFastestInterval(5000);
mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);

if (ContextCompat.checkSelfPermission(parentContext, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED)
{
mFusedLocationClient.requestLocationUpdates(mLocationRequest, new LocationCallback(){
@Override
public void onLocationResult(LocationResult locationResult) {

onLocationChanged(locationResult.getLastLocation());
}

} , Looper.myLooper());

}


}

这是一个 LocationApi 类,我想在整个应用程序生命周期中运行该类,这个特定的应用程序运行许多 Activity ,因此我不想每次销毁并创建新 Activity 时都“重新创建”请求。

允许并检查 FINE_LOCATION 的权限,logcat 中没有错误,并且代码在创建 mFusedLocationClient 对象时运行 requestLocationUpdates 方法,但它从不调用“onLocationResult”方法。

使用此 API 时我缺少什么吗?

最佳答案

在请求位置更新之前,您的应用必须连接到位置服务并发出位置请求。像这样的事情:

private static LocationRequest createLocationRequest() {
LogHelper.trace("createLocationRequest");
LocationRequest mLocationRequest = new LocationRequest();
mLocationRequest.setInterval(200000);
mLocationRequest.setFastestInterval(300000);
mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
return mLocationRequest;
}

public static void checkLocationService(final Fragment fragment, final FusedLocationProviderClient client, final OnSuccessListener<LocationSettingsResponse> successListener, OnFailureListener failureListener) {

LogHelper.trace("checkLocationService");
final LocationRequest request = createLocationRequest();
LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder()
.addLocationRequest(request);

SettingsClient settingsClient = LocationServices.getSettingsClient(fragment.getActivity());
Task<LocationSettingsResponse> task = settingsClient.checkLocationSettings(builder.build());

task.addOnSuccessListener(fragment.getActivity(), new OnSuccessListener<LocationSettingsResponse>() {
@Override
public void onSuccess(LocationSettingsResponse locationSettingsResponse) {
LogHelper.trace("onSuccess");
startLocationService(client, request, new LocationCallback());
successListener.onSuccess(locationSettingsResponse);
}
});

task.addOnFailureListener(fragment.getActivity(), failureListener);
}

关于android - FusedLocationClient 未调用 onLocationResult,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52587361/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com