gpt4 book ai didi

java - 如何定期更新 Firebase 实时数据库的位置?

转载 作者:行者123 更新时间:2023-12-01 18:35:56 25 4
gpt4 key购买 nike

我正在使用 Android Studio 和 Firebase 创建实时公共(public)交通跟踪系统。我创建了一个切换按钮,用户打开该按钮,位置将开始跟踪。我遇到的问题是位置数据只发送到数据库一次。但对于应用程序来说,位置跟踪正常。
我需要的是每次位置更新都必须更新到数据库中。这是我的代码中的错误吗?

这是位置回调函数:

        //Location Callback
locationCallback = new LocationCallback(){
@Override
public void onLocationResult(LocationResult locationResult) {

if(locationResult == null) {
return;
}
Location driverLocation = locationResult.getLastLocation();
Toast.makeText(DriverDetail.this, driverLocation.getLatitude()+", "+driverLocation.getLongitude()
, Toast.LENGTH_SHORT).show();
Log.d("Location Update: ", "onLocationResult: Location is: "
+driverLocation.getLatitude()+", "+driverLocation.getLongitude());
}
};

这是切换按钮的代码

locate_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View button) {
if (locate_btn.isChecked()) {
// The toggle is enabled
Toast.makeText(DriverDetail.this, "Start tracking location", Toast.LENGTH_SHORT).show();

final String value_lat = String.valueOf(driverLocation.getLatitude());
final String value_lng = String.valueOf(driverLocation.getLongitude());

getLocationUpdates();

ref.child(firebaseUser.getUid()).child("Latitude").setValue(value_lat);
ref.child(firebaseUser.getUid()).child("Longitude").setValue(value_lng);

}
else {
// The toggle is disabled
fusedLocationProviderClient.removeLocationUpdates(locationCallback);
Toast.makeText(DriverDetail.this, "Stop tracking location", Toast.LENGTH_SHORT).show();
}

}
});

这是我设置的位置请求。

//Update Location
private void getLocationUpdates(){

locationRequest = LocationRequest.create();
locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
locationRequest.setInterval(5000);
locationRequest.setFastestInterval(3000);

fusedLocationProviderClient.requestLocationUpdates(locationRequest, locationCallback, Looper.getMainLooper());
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

}

@Override
public void onCancelled(@NonNull DatabaseError databaseError) {

}
};
}

最佳答案

当用户切换按钮时,您的代码现在正在将位置数据写入 Firebase。

您想要的是在切换按钮后连续写入位置。这意味着写入应该在 onLocationResult 内部发生(或触发):

locationCallback = new LocationCallback(){
@Override
public void onLocationResult(LocationResult locationResult) {

if(locationResult == null) {
return;
}
Location driverLocation = locationResult.getLastLocation();

if (true) { // TODO: check if button is toggled
final String value_lat = String.valueOf(driverLocation.getLatitude());
final String value_lng = String.valueOf(driverLocation.getLongitude());

ref.child(firebaseUser.getUid()).child("Latitude").setValue(value_lat);
ref.child(firebaseUser.getUid()).child("Longitude").setValue(value_lng);
}
}
};

if (true) 语句中,您可能想要检查按钮是否已切换。但由于我注意到您仅在用户切换按钮时注册位置更新,因此甚至可能不需要该检查。

关于java - 如何定期更新 Firebase 实时数据库的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60044572/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com