我是否需要为 fusedLocationProviderClient 注销 locationcallback?

Should i need to unregister locationcallback for fusedLocationProviderClient?

我正在尝试使用服务在后台获取用户的位置。我正在使用 FusedLocationProviderClient 来完成此任务,并且我在我的服务 class 中完成了所有这些事情。

我向用户提供了两个名为 "Yes" 和 "No" 的按钮。当用户按下 "Yes" 我开始服务,如果用户按下 "No" 我停止服务。

当用户按下 "Yes" 按钮然后按下 "No" 时,就会出现实际问题。让我逐步提供完整的场景。

  1. 用户按下 "Yes" 按钮,因此我正在启动服务,并且我正在使用 FusedLocationProviderClient 请求位置更新。
  2. 现在用户按下 "No" 按钮,所以我调用 stopservice 方法来停止我的服务。

现在的问题是我的服务停止了,但我仍然收到我不想要的用户的位置更新。

所以,我想知道这怎么可能。是否需要取消注册 locationcallback?

GpsPingService.java

@Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Log.e("JK-->>", "Gpsping Service onstartcommand!");
        try {

            locationRequest = new LocationRequest()
                    .setInterval(1000)
                    .setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY)
                    .setFastestInterval(1000);

                locationCallback = new LocationCallback() {
                        @Override
                    public void onLocationResult(LocationResult locationResult) {
                            Log.e("JK-->>", "location updated by gpsping service-->> " + locationResult.getLastLocation().getLatitude() +
                                    " " + locationResult.getLastLocation().getLongitude());
                            Toast.makeText(getApplicationContext(), "Location changed!", Toast.LENGTH_SHORT).show();
                        }
                };


            fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(getApplicationContext());
            fusedLocationProviderClient.requestLocationUpdates(locationRequest, locationCallback, Looper.myLooper());


        } catch (Exception e) {
            Log.e("JK-->>Gpsping-->> ", e.getMessage());
        }
        return START_STICKY;
    }

您需要取消注册回调,这样您就不会每次都得到结果。您可以使用:

fusedLocationProviderClient.removeLocationUpdates(locationCallback);

您需要创建 locationCallback class 范围,以便您可以在 onStartCommand()

之外调用它