如何停止检测Firebase实时数据库中的更改的服务

时间:2019-03-30 03:27:48

标签: java android firebase-realtime-database android-service

我想从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 :(得分:0)

如果您只想一次获取数据,则可以使用addListenerForSingleValueEvent

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

如果情况更复杂,则可以使用当前代码进行注册。但是要稍后阻止事件监听器响应数据更改,您需要remove that listener

为此,请在注册侦听器时首先保留对其的引用:

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

然后您可以通过以下方式将其删除:

mDatabase.child("objectsData").removeEventListener(myListener)