как остановить службы, которые обнаруживают изменения в базе данных реального времени Firebase - PullRequest
0 голосов
/ 30 марта 2019

Я хочу непрерывно получать данные из базы данных Firebase в реальном времени.Я сделал для этого сервис, но сервис не останавливается на звонке stopService.Я хочу прекратить обслуживание, когда получу соответствующие данные.Пожалуйста, помогите.

Я пытался

Intent intent = new Intent(MainActivity.this,BackgroundSoundService.class);  
stopService(intent);

Но это не сработало.Что еще мне нужно сделать, чтобы остановить эту службу?

 @Override
public int onStartCommand(Intent intent, int flags, int startId) {
   IniTializeSpeech(getApplicationContext());
    mDatabase = FirebaseDatabase.getInstance().getReference();
    mDatabase.child("objectsData").addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
           String ss =(String) dataSnapshot.getValue();
           Log.i("OnDataChange",ss);
            t1.speak(dataSnapshot.getValue().toString(), TextToSpeech.QUEUE_FLUSH, null);
        }

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

        }
    });
    return Service.START_STICKY;
}

@Override
public void onDestroy() {
    super.onDestroy();
}

1 Ответ

0 голосов
/ 30 марта 2019

Если вы заинтересованы в получении данных только один раз, вместо этого вы можете использовать addListenerForSingleValueEvent:

mDatabase.child("objectsData").addListenerForSingleValueEvent(...

Если у вас более сложные условия, вы можете использовать свой текущий код для регистрации. Но чтобы в дальнейшем обработчик событий не реагировал на изменения данных, необходимо удалить этот прослушиватель .

Для этого вы сначала сохраняете ссылку на слушателя, когда регистрируете его:

ValueEventListener myListener = mDatabase.child("objectsData").addValueEventListener(...

И затем вы можете позже удалить его с помощью:

mDatabase.child("objectsData").removeEventListener(myListener)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...