2011-04-04 10 views
0

サービスを開始するプログラムがあります。サービス、活動、および通知

サービスは定期的にサーバーの更新をチェックします。サーバー・サービス上に新しい更新がある場合、通知が作成されます。私のアプリケーションがフォアグラウンドであっても、それは顕著になります。しかし、アプリケーションがバックグラウンドであるか停止している場合にのみ、通知を作成する必要があります。

私はそれを実装する最良の方法をアドバイスできますか?

答えて

2

sendOrderedBroadcast()をご覧ください。あなたのサービスはそれを送信してから、応答を待っているハンドラを持つことができます。あなたの活動は、それが開いている場合に真の応答を設定し、要求を処理することができます。サービス内のハンドラが応答を受け取ると、ブロードキャストが処理されなかった場合に通知を作成することができます。それ以外の場合は、無視することができます。あなたのUIアクティビティで

はそうのようなBroadcastReceiver設定:あなたのサービスの利用sendOrderedBroadcast(中

//register BroadcastReceiver. This will probably go in onCreate() 
registerReceiver(messageBroadcastListener, 
      new IntentFilter("my.intent.INTENT_NAME")); 

//Defined elsewhere in your code, I always do these outside of onCreate() 
//to keep it clean 
BroadcastReceiver messageBroadcastListener = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context arg0, Intent intent) { 
     Bundle data = intent.getExtras(); 
     if(data != null) { 
      //display info or whatever and then: 
      setResultCode(Activity.RESULT_OK); 
     } 
    } 

}; 

を)ので、のような結果のための受信機があります。

BroadcastReceiver sendMessageResultReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context arg0, Intent intent) { 
     if(getResultCode() != Activity.RESULT_OK) { 
      //display notification here 
      } 
    } 
} 

のAndroidManifest.xmlでのアクティビティのインテントフィルタを設定します。

<activity android:name=".MyActivity"> 
     <intent-filter> 
      <action android:name="my.intent.INTENT_NAME" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
</activity> 
+0

ありがとうございます。私はすでにそれを実装しています。あなたはandroidmanifest.xmlにbroadcastrecieverを登録する方法を教えてください。 – skywa1ker

+0

nm。これを無視してください。私は愚かです。適切に1秒で答えます。 – jmichalicek

+0

さて、すべて整理されました。私は、あなたのアクティビティにBroadcastReceiverを登録するための行と、AndroidManifest.xmlにあるインテントフィルタを登録しました。 – jmichalicek

0

フラグ変数がそのジョブを実行すると思います。 変数を入力し、通知をクリックしたときに実行されるpendingintentのみを変更します。 値が変更されていない場合に通知を無効にします。

0

あなたは、アクティビティが別のアプリに覆われているか、正面に戻ってきたときにonPause()とonResume()が呼び出されます。それでは、public varを設定するか、サービス上で関数を呼び出してください。

関連する問題