我正在尝试使用服务获取用户在后台的位置。我正在使用FusedLocationProviderClient完成此任务,我在我的服务类中做了所有这些事情。
我提供两个名为&#34的按钮;是"和"不"给用户。当用户按下"是"我正在开始服务,如果用户按下"否"我停止服务。
当用户按下"是"时出现实际问题按钮,然后按"否" .let我一步一步提供完整的方案。
现在问题是我的服务被停止但我仍然得到了我不想要的用户的位置更新。
所以,我想知道怎么可能。有没有必要取消注册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;
}
答案 0 :(得分:1)
您需要取消注册回调,这样您每次都无法获得结果。您可以使用:
fusedLocationProviderClient.removeLocationUpdates(locationCallback);
您需要制作locationCallback
类范围,以便在onStartCommand()