我是否需要为fusionLocationProviderClient取消注册locationcallback?

时间:2018-03-05 16:51:41

标签: java android fusedlocationproviderapi

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

我提供两个名为&#34的按钮;是"和"不"给用户。当用户按下"是"我正在开始服务,如果用户按下"否"我停止服务。

当用户按下"是"时出现实际问题按钮,然后按"否" .let我一步一步提供完整的方案。

  1. 用户按"是"按钮所以我开始服务,因为我使用FusedLocationProviderClient请求位置更新。
  2. 现在用户按"否"按钮所以我调用stopservice方法来停止我的服务。
  3. 现在问题是我的服务被停止但我仍然得到了我不想要的用户的位置更新。

    所以,我想知道怎么可能。有没有必要取消注册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;
        }
    

1 个答案:

答案 0 :(得分:1)

您需要取消注册回调,这样您每次都无法获得结果。您可以使用:

fusedLocationProviderClient.removeLocationUpdates(locationCallback);

您需要制作locationCallback类范围,以便在onStartCommand()

之外调用它