首页 > 解决方案 > Android FusedLocationProviderClient 跨活动使用

问题描述

我在一个活动中开始位置更新,并在我的应用程序流中的后续活动中停止它们。

我使用静态方法创建了一个最终的 LocationUtilities 类[代码如下所示,其中包含相关部分],用于请求位置更新。我从互联网上的某个地方得到了这种模式,现在想知道我是否没有问题。这样,LocationCallback 可以在不同的活动中被引用。

我的困惑来自于使用启动活动的上下文调用 startLocationUpdates(),以及使用结束活动的上下文调用 stopLocationUpdates()。这是否正常工作?

此外,使用不同的活动上下文调用 getFusedLocationProviderClient。

这里有问题吗?

如果有问题,我可以将起始活动上下文保存在静态字段中并在 stopLocationUpdates() 中使用它而不是调用活动上下文吗?

当我移动到 UI 流中的其他 Activity 时,当我的起始 Activity 被销毁时,位置更新会发生什么情况?

请注意:为简洁起见,我省略了检查权限等的部分。我开始注意到我的应用程序中以位置更新为中心的奇怪动作,并想知道这是否是问题所在。它不是一直可重现的。如果我将 fusedLocationProviderClient 声明为静态字段,Studio 会抱怨内存泄漏。

private static LocationCallback locationCallback;

public static void startLocationUpdates(Context appContext) {
    locationCallback = new myLocationCallback();
    FusedLocationProviderClient fusedLocationProviderClient =
        LocationServices.getFusedLocationProviderClient(appContext);
    fusedLocationProviderClient.requestLocationUpdates(
        locationRequest, locationCallback, Looper.getMainLooper())
}

public static stopLocationUpdates(Context appContext) {
    FusedLocationProviderClient fusedLocationProviderClient =
        LocationServices.getFusedLocationProviderClient(appContext);
    fusedLocationProviderClient.removeLocationUpdates(locationCallback);
}

private static class myLocationCallback extends LocationCallback {
    @Override
    public void onLocationResult(LocationResult locationResult) {
        :    :
    }
}

标签: androidfusedlocationproviderclient

解决方案


推荐阅读