私は、バックグラウンドでウェブ検索を行うためのサービスを起動する主なアクティビティを持っています。検索が完了すると、主なアクティビティがインテントを取得します。私の主な活動でアクティビティでインテントが受信されない
は、私が意図「検索の終わり」に耳を傾け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が(デバッガでチェックされていない)ことを知っています。
フィルタを動的に作成するので、マニフェストファイルにフィルタを定義する必要はありません。
何か間違っていますか?
おかげ アイザック
ご不明な点実際には、サービスのやりとりが必要以上に複雑になっています。サービスはローカルサービスなので、直接話をして、インテントをブロードキャストしてレシーバーで聞くことなく、完了したらアクティビティーに通知することができます。 http://stackoverflow.com/questions/3197335/android-restful-api-service/3197456#3197456 –
を確認していただきありがとうございます。私はReceiverで動作するようにコードを変更しました。完全に動作します。 –
トピックに関するよくある議論 http://stackoverflow.com/questions/4233873/how-to-get-extra-data-from-intent-in-android –