2017-10-07 13 views
1

私のアンドロイドアプリケーションでは、アプリケーションがアクティブでなくてもfirebaseデータベースのchildEventListenerを実装しようとしています。 firebaseデシベル特定の子は、それがユーザーに通知する必要があり、新たなエントリを持っている時はいつでも は私が私のその後android-firebase childEventListener in service

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

として、マニフェストファイルでサービスを宣言したので、今まで私は、これで

を行っている ..意味します

public class ChildEventListener extends Service { 

FirebaseAuth auth; 
NotificationCompat.Builder builder; 

@Nullable 
@Override 
public IBinder onBind(Intent intent) { 
    return null; 
} 

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    retrivemsg(); 
    return START_STICKY; 
} 

public void retrivemsg() 
{ 
    DatabaseReference mdb= FirebaseDatabase.getInstance().getReference("messages/"+auth.getCurrentUser().getUid()); 
    builder=new NotificationCompat.Builder(this,"onchildadded"); 
    mdb.addChildEventListener(new com.google.firebase.database.ChildEventListener() { 
     @Override 
     public void onChildAdded(DataSnapshot dataSnapshot, String s) { 

      String msg=dataSnapshot.child("msg").getKey(); 
      builder.setSmallIcon(R.drawable.send); 
      builder.setContentTitle("child added"); 
      builder.setContentText(msg); 
      NotificationManager notificationManager=(NotificationManager)getSystemService(NOTIFICATION_SERVICE); 
      notificationManager.notify(1,builder.build()); 
     } 

     @Override 
     public void onChildChanged(DataSnapshot dataSnapshot, String s) { 

     } 

     @Override 
     public void onChildRemoved(DataSnapshot dataSnapshot) { 

     } 

     @Override 
     public void onChildMoved(DataSnapshot dataSnapshot, String s) { 

     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 

     } 
    }); 
} 

}

を次のようにChildEventListenerクラスはありませんが、私は試してみましたが、ない運...でもねっ子どもが追加されました。私は通知を受けていません....アプリが前景にある場合でも...

+0

サービスが開始されていますか?通知の代わりに、ログを使用して最初に問題のある場所を確認することもできます。サービス、Firebaseリスナ、通知のどちらにあるのでしょうか? – merterpam

+0

ohhありがとうございました....私の間違い...私はサービスを開始するのを忘れました –

+0

しかし、今問題は、私はアプリがアクティブなときに通知を得ています...サービスはバックグラウンドで働いていません...そしてまた...通知はまた、最初のエントリだけを取得しています...もし私が1つのアイテムを追加したら、通知を出します。私はそれをスワイプして通知を取り消して、もう一度項目を追加して、新しい通知をしないとします。なぜ起こったの? –

答えて

0

実際にはマニフェストfieでサービスを開始できます。しかし、私の場合、私の間違いは、私が実際に開始したいサービス開始ステートメントを追加しなかったことでした。ので、追加するだけで

startService(new Intent(this, ChildEventListener.class)); 

私はそれを開始したいクラスです。私の問題を解決しました。

-Thanx @ merterpam、私の間違いを指摘するため

関連する問題