2017-02-14 6 views
0

私は、アプリケーションが動作していなくても新しいメッセージを受信したときに通知を与えるアンドロイドアプリケーションを作成する必要があります。私は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 Cloud Messagingを使用して、アプリを開いていないときにユーザのイベントに通知することをお勧めします。 –

+0

@FrankvanPuffelenしかし、私はfirebaseを使用していますが、このコードは、アプリケーションがこのタイプのサービスを書き込む方法を事前に感謝していない場合は動作しません。 –

+0

しかしwhatzaapのような他の主要アプリケーションもバックグラウンドプロセスとサービスを常に実行します..最善の方法ではない? –

答えて

1

でのおかげで、コードのこの作品は、実行するAndroidのコンポーネント内にラップする必要があります。それは本当にあなたの誘因が何であるかにかかっています。これがバックグラウンドで実行したい場合は、serviceまたはbroadcastrecieverを使用するのが最善の方法です。 私が言及したように、それは本当にトリガーに依存します。

たとえば、新しいSMSを検出したときにトーストを表示する必要があるアプリがあります。このような場合、ブロードキャストに登録する必要があり、SMSが到着したときにシステムがブロードキャスト受信者を呼び出します。レシーバーでは、自分のロジックを置くことができます(トーストを表示するなど)。

+0

事前に感謝の申し出をお願いします –

+0

トリガーポイントは何ですか?コードを実行したいときは?明らかに私はループや何かでこのコードを連続して実行したくないと思っています – Dibzmania

+0

アプリケーションがアクティブでなくても新しいデータがfirebaseに挿入されたときにこのコードを実行する必要があります –

関連する問題