2017-02-14 34 views
0

我必须创建一个android应用程序,当接收到新消息时发出通知,即使应用程序不工作。我正在使用Firebase数据库。我为firebase datasnapshot编写代码,但它只在应用程序工作时才起作用,如果应用程序不工作,我需要运行此代码。创建永无止境的后台服务通知

 Mref=new Firebase("https://iyutue-30s49.firebaseio.com/"); 
    Mref.addChildEventListener(new ChildEventListener() { 
     @Override 
     public void onChildAdded(DataSnapshot dataSnapshot, String s) { 

      String value=dataSnapshot.getValue(String.class); 
      myDb.GetAllData(); 
      String idd= String.valueOf(myDb.id); 
      if (value.equals(idd)==true){ 
       NotificationCompat.Builder builder=new NotificationCompat.Builder(getApplicationContext()); 
       builder.setSmallIcon(R.drawable.ic_tab_profile); 
       builder.setContentTitle("plaese").setContentText("jijo"); 
       Intent intent =new Intent(getApplicationContext(),MainActivity.class); 
       TaskStackBuilder stackBuilder=TaskStackBuilder.create(getApplicationContext()); 
       stackBuilder.addParentStack(MainActivity.this); 
       stackBuilder.addNextIntent(intent); 
       PendingIntent pendingIntent=stackBuilder.getPendingIntent(0,PendingIntent.FLAG_UPDATE_CURRENT); 
       builder.setContentIntent(pendingIntent); 
       NotificationManager NM=(NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE); 
       NM.notify(0,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(FirebaseError firebaseError) { 

     } 
    }); 

我需要在后台执行该代码时,应用程序是不是也工作请帮我感谢advnace

+2

当应用程序未处于活动状态时保持连接处于打开状态将导致严重的电量耗尽并伤害用户体验。相反,建议您使用Firebase云消息传递功能在用户没有打开应用程序时通知用户。 –

+0

@FrankvanPuffelen但在这里我使用firebase,但这个代码不工作,如果应用程序不活跃如何写这种服务类型提前感谢 –

+0

但其他主要应用程序,如whatzaap也运行后台进程和服务总是..是不是最好的方法? –

回答

1

需要一个Android组件内部被包裹要执行这段代码。这真的取决于你的触发器是什么。如果这是您想要在后台执行的操作,那么使用servicebroadcastreciever是最佳选择。 正如我所提到的,它确实取决于触发器。

例如,假设您有一个应用程序需要在检测到新SMS时显示敬酒。在这种情况下,您需要注册广播,系统在SMS到达时调用广播接收器。在接收器中,您可以放置​​自己的逻辑(如显示敬酒)。

+0

请给我一个建议,我的情况下提前致谢 –

+0

你的触发点是什么?当你想运行代码?很显然,我希望你不想在循环或连续运行这个代码 – Dibzmania

+0

当我需要运行这段代码,当新的数据插入到firebase中,通知即使应用程序不活动也提前致谢 –