Как периодически обновлять расположение базы данных Firebase Realtime? - PullRequest
0 голосов
/ 03 февраля 2020

Я создаю систему отслеживания транспорта publi c в реальном времени, используя Android Studio и Firebase. Я создал кнопку переключения, на которой пользователь переключается, местоположение начнет отслеживаться. Проблема, с которой я столкнулся, заключается в том, что данные о местоположении отправляются в базу данных только один раз. Но для приложений местоположение отслеживается нормально.
Мне нужно каждый раз, когда обновление местоположения должно обновляться в базе данных. Это ошибка или ошибка в моем коде?

Это функция обратного вызова местоположения:

        //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) {

            }
        };
    }

1 Ответ

0 голосов
/ 03 февраля 2020

Ваш код прямо сейчас записывает данные о местоположении в 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) вы можете проверить, переключается ли кнопка. Но поскольку я заметил, что вы регистрируетесь только для обновления местоположения, когда пользователь переключает кнопку, эта проверка может даже не понадобиться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...