Java 是否需要注销fusedLocationProviderClient的locationcallback?

Java 是否需要注销fusedLocationProviderClient的locationcallback?,java,android,fusedlocationproviderapi,Java,Android,Fusedlocationproviderapi,我正在尝试使用服务获取用户在后台的位置。我正在使用FusedLocationProviderClient来完成这项任务,我正在我的服务类中完成这一切 我为用户提供了两个名为“是”和“否”的按钮。当用户按“是”时,我启动服务;如果用户按“否”,我停止服务 当用户按“是”按钮,然后按“否”时,实际问题就会出现。让我一步一步地提供完整的场景 用户按下“是”按钮,我启动服务,并使用FusedLocationProviderClient请求位置更新 现在用户按下“否”按钮,所以我调用stopservice

我正在尝试使用服务获取用户在后台的位置。我正在使用FusedLocationProviderClient来完成这项任务,我正在我的服务类中完成这一切

我为用户提供了两个名为“是”和“否”的按钮。当用户按“是”时,我启动服务;如果用户按“否”,我停止服务

当用户按“是”按钮,然后按“否”时,实际问题就会出现。让我一步一步地提供完整的场景

  • 用户按下“是”按钮,我启动服务,并使用FusedLocationProviderClient请求位置更新
  • 现在用户按下“否”按钮,所以我调用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
    类作用域,以便可以在
    onStartCommand()之外调用它。

    它是取消注册回调还是删除先前检索到的LocationSupdate?它将删除给定位置结果侦听器的所有位置更新。您好,它正在工作,但我面临一个问题。即使我设置了
    locationRequest.setInterval(1000)
    ,我的locationcallback也会每10秒向我发送一次位置更新。你能告诉我为什么会这样吗@ישו אוהב אותך