我是否需要为 fusedLocationProviderClient 注销 locationcallback?
Should i need to unregister locationcallback for fusedLocationProviderClient?
我正在尝试使用服务在后台获取用户的位置。我正在使用 FusedLocationProviderClient 来完成此任务,并且我在我的服务 class 中完成了所有这些事情。
我向用户提供了两个名为 "Yes" 和 "No" 的按钮。当用户按下 "Yes" 我开始服务,如果用户按下 "No" 我停止服务。
当用户按下 "Yes" 按钮然后按下 "No" 时,就会出现实际问题。让我逐步提供完整的场景。
- 用户按下 "Yes" 按钮,因此我正在启动服务,并且我正在使用 FusedLocationProviderClient 请求位置更新。
- 现在用户按下 "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()
之外调用它
我正在尝试使用服务在后台获取用户的位置。我正在使用 FusedLocationProviderClient 来完成此任务,并且我在我的服务 class 中完成了所有这些事情。
我向用户提供了两个名为 "Yes" 和 "No" 的按钮。当用户按下 "Yes" 我开始服务,如果用户按下 "No" 我停止服务。
当用户按下 "Yes" 按钮然后按下 "No" 时,就会出现实际问题。让我逐步提供完整的场景。
- 用户按下 "Yes" 按钮,因此我正在启动服务,并且我正在使用 FusedLocationProviderClient 请求位置更新。
- 现在用户按下 "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()