2011-03-02 18 views
0

私は、バックグラウンドでウェブ検索を行うためのサービスを起動する主なアクティビティを持っています。検索が完了すると、主なアクティビティがインテントを取得します。私の主な活動でアクティビティでインテントが受信されない

は、私が意図「検索の終わり」に耳を傾けBroadcastReceiverとインテントフィルタを定義します。サービスで

public class AgeRage extends Activity { 


    // Listener to all results from background processes 

    BroadcastReceiver receiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      if (intent.getAction().equals(ImageSearchService.SEARCH_RESULT_ACTION)) { 
0); 
       Toast.makeText(context,"Got " + i + "results", Toast.LENGTH_SHORT).show(); 
      } 
      else Toast.makeText(context,"unknown intent", Toast.LENGTH_SHORT).show(); 


     } 
    }; 

    IntentFilter receiverFilter = new IntentFilter(); 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.main); 


     // Register to image search service messages 

     receiverFilter.addAction(ImageSearchService.SEARCH_RESULT_ACTION); 
     registerReceiver(receiver,receiverFilter); 

     ... 

、私は、検索を行うと、それが行われ、Iインテントを送信する:

public class ImageSearchService extends IntentService { 

... 

protected void onHandleIntent (Intent intent) { 

... doing search ... 

    Intent i = new Intent (this,AgeRage.class); 
    i.setAction (SEARCH_RESULT_ACTION); 
    i.putExtra(SEARCH_STATUS, (searchStatus ==SearchStatus.DONE) ? true:false); 
    i.putExtra (SEARCH_RESULT_NUM, totalResultNum); 
    i.putExtra (SEARCH_ID, searchID); 
    sendBroadcast (i,null); 
} 

しかし、主なアクティビティはインテントを取得しません。私はsendBroadcastが呼び出されていて、受信者のOnReceiveが(デバッガでチェックされていない)ことを知っています。

フィルタを動的に作成するので、マニフェストファイルにフィルタを定義する必要はありません。

何か間違っていますか?

おかげ アイザック

+1

ご不明な点実際には、サービスのやりとりが必要以上に複雑になっています。サービスはローカルサービスなので、直接話をして、インテントをブロードキャストしてレシーバーで聞くことなく、完了したらアクティビティーに通知することができます。 http://stackoverflow.com/questions/3197335/android-restful-api-service/3197456#3197456 –

+0

を確認していただきありがとうございます。私はReceiverで動作するようにコードを変更しました。完全に動作します。 –

+0

トピックに関するよくある議論 http://stackoverflow.com/questions/4233873/how-to-get-extra-data-from-intent-in-android –

答えて

0

[OK]をクリックします。まあ、私はちょうど私のを確認し、我々はそれを同じようにやっている、しかし...

ImageSearchService.SEARCH_RESULT_ACTION

はSEARCH_RESULT_ACTIONがパブリック静的文字列変数ですcom.yourpackagename.ImageSearchSrvi​​ce.SEARCH_RESULT_ACTION

をやってみ。それが役立つかどうかを見てください。

私はそれがACTIONの名前でなければならないと思います。また、ブレークポイントをtrueにしてログだけをチェックしたいかもしれません。 int.getAction()を実行し、if文の内部を調べるのではなく、これを出力します。ちょうどそれを印刷してみてください。それはしばらくしてクラッシュするブラスカスの受信機の中で壊す必要はありません。

関連する問題