9阅网

您现在的位置是:首页 > 知识 > 正文

知识

java - 地图框。在前台服务中初始化LocationEngineCallback。

admin2022-11-07知识15

我的想法是,我想每10秒跟踪用户的位置,因为请求新的位置更新。为此,我有一个前台服务。

public class LocationService extends Service{
 ...
}

其中我初始化了请求选项,但我还需要初始化回调。在文档中说,为了避免内存泄漏,必须定义一个私有类,但我不能使用它,因为它想要一个activity而不是一个服务类作为下面代码中的参数。但是,我不能使用它,因为在下面的代码中,它需要一个活动而不是一个服务类作为参数。

private final WeakReference<LocationChangeListeningActivity> activityWeakReference;

LocationChangeListeningActivityLocationCallback(LocationChangeListeningActivity activity) {
    this.activityWeakReference = new WeakReference<>(activity);
}

我的问题是,在这种情况下我们如何提供回调?



【回答】:

我解决了这个问题(不知道这是否是最有效的方法,但如果我找到其他方法,帖子会更新)。这个类,它扩展了 Service 类只需要实现 LocationEngineCallback<LocationEngineRequest> 这样。

public class LocationService extends Service implements LocationEngineCallback<LocationEngineResult>{
...
}

然后,我们只需设置请求位置和检索lastLocation到当前实例(this)。

locationEngine.requestLocationUpdates(request, this, getMainLooper());
locationEngine.getLastLocation(this);   

并在重载方法中声明内部逻辑。

@Override
public void onSuccess(LocationEngineResult result) {
    //Handle Success
}

@Override
public void onFailure(@NonNull Exception exception) {
    //Handle Failure
}

当然,不要忘了停止更新,并删除 "LastLocation"。LocationEngine 停止服务后,。

@Override
public void onDestroy() {
    super.onDestroy();
    locationEngine.removeLocationUpdates(this);
    locationEngine = null;
}