2017-04-12 95 views
0
public class MyService extends Service { 

     FirebaseDatabase database = FirebaseDatabase.getInstance(); 
     DatabaseReference myRef = database.getReference().child("notify"); 


     // NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 

     public MyService() { 
     } 

     @Override 
     public IBinder onBind(Intent intent) { 
      // TODO: Return the communication channel to the service. 
      return null; 
     } 

     @Override 
     public void onCreate() { 
      super.onCreate(); 
      myRef.addChildEventListener(new ChildEventListener() { 
       @Override 
       public void onChildAdded(DataSnapshot dataSnapshot, String s) { 

        String value = dataSnapshot.getValue().toString(); 

        NotificationCompat.Builder mBuilder = 
        (NotificationCompat.Builder) new NotificationCompat.Builder(getApplicationContext()) 
          .setSmallIcon(R.mipmap.ic_launcher) 
          .setContentTitle("Society") 
          .setContentInfo(value) 
          .setVibrate(new long[]{500, 500}).setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)) 
          .setContentText(value); 

        NotificationManager mNotifyMgr = 
        (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 
        mNotifyMgr.notify(001, mBuilder.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) { 

       } 
      }); 

     } 

     @Override 
     public int onStartCommand(Intent intent, int flags, int startId) { 

      Toast.makeText(getApplicationContext(), "Service started", Toast.LENGTH_LONG).show(); 

      return START_STICKY; 
     } 
    } 

我想要创建一个服务,以便在将新子项添加到firebase中的“notify”标记时显示通知。 问题是服务第一次开始时,通过通知构建器通知“通知”标记下的所有孩子。 同样在一组特定的句点之后,即使在通知标签下没有创建新的孩子,该过程也会重复。 我想只显示添加到“notify”标签的最新孩子的通知。使用Firebase的服务的Android通知

回答

0

当您将ChildEventListener添加到Firebase参考中时,onChildAdded被称为一次给给定资源上的每个孩子。否则,您将如何填充ListViewRecyclerView? ;-)

我建议你在你的JSON结构中添加一个createdAtupdatedAt字段(使用ISO 8601格式)。然后,您可以在添加事件侦听器后创建元素query

但是it is a bad idea keep a listener running on a background service,因为你会保持一个长时间打开插座,耗尽设备电池。

+0

但是,你能告诉我为什么通知一次又一次地间隔弹出? –