2016-07-16 16 views
5

'dan küçük bir sohbet uygulaması oluşturmak için Firebase kullanıyorum. Uygulamam arka plandaysa veya çıkılıyorsa, firebase veritabanı konumunu dinlemeye devam etmek için ChildEventListener'u istiyorum. Şu anda kayıt ediyorum ve finish() kullanarak benim app çıkarken veya kapatıldığında, o zaman benim ChildEventListener benim yöntemler onChildAdded veya onChildChanged gibi çağrılıyor olsa da removeEventListener aradı rağmen ChildEventListener her zaman arka planda çalışan olmasını istiyorum. Bunu yapmanın bir yolu var mı?Firebase: ChildEventListener uygulamasını dinlemeye devam etse de uygulama

+0

Merhaba, bunun için herhangi bir çözüm buldunuz? –

+0

Hayır, ama 'removeEventListener''ü çağırmayın ve sanırım sizin için çalışmalı! –

+0

Tamam. Yani ChildEventListener her zaman arka plan iş parçacığında çalışacak, hatta uygulama öldürecek YA DA bu şeyleri hizmette yapmamız gerekecek mi? –

cevap

8

kullanın servisi sohbet app kalmıştır

public class ChildEventListener extends Service { 
     @Override 
     public IBinder onBind(Intent intent) { 
      return null; 
     } 
     @Override 
     public int onStartCommand(Intent intent, int flags, int startId) { 
      //Adding a childevent listener to firebase     
      Firebase myFirebaseRef = new Firebase("FirebaseURL"); 
      myFirebaseRef.child("FIREBASE_LOCATION").addValueEventListener(new ValueEventListener() { 

       @Override 
       public void onDataChange(DataSnapshot snapshot) { 
        //Do something using DataSnapshot say call Notification 
       } 

       @Override 
       public void onCancelled(FirebaseError error) { 
        Log.e("The read failed: ", error.getMessage()); 
       } 
      }); 

      } 

       @Override 
       public void onCancelled(FirebaseError firebaseError) { 
        Log.e("The read failed: ", firebaseError.getMessage()); 
       } 
      }); 

      return START_STICKY; 
     } 

    } 

<service android:name=".ChildEventListener "/> 

Manifest

içine Hizmetin kayıt Hizmetin başlatın ve/hizmetinizi başlatmak için childEvents, dinlemek için ChildEventListener dinlemek için tasarım

+0

ancak mevcut hizmet örneğimi başlattığımda, ChildEventListener'ı tekrar kaydedecek ve bu da ChildEventListener öğesinin birden çok dinleyicisine neden oluyor. ChildEventListener cihazımın zaten dinlemiş olduğunu kontrol etmek için var mı? –

+0

childEvent dinleyicinizin aktif olup olmadığını kontrol etmek için sharedPreferences kullanın. Dinlemiyorsa, o olay dinleyiciyi sadece –

+0

eklediğimi söylüyorum, bu ChildEventListener'ı nasıl kontrol edeceğimi nasıl ekleyelim? dinlemediğini söyleyecek herhangi bir dinleyici var mı? –