我有一个主要活动,启动服务在后台做一个网页搜索,我希望主要活动获得一个意图,当搜索完成。意图没有收到活动
在我的主要活动中,我定义了一个广播接收器和意图过滤器来听的意图“搜索结束”:
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);
...
在服务上,我做了搜索,当它完成后,我发送意图:
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没有(使用调试器进行检查)。
我认为,因为我动态创建过滤器,我不需要在清单文件中定义一个过滤器。
我做错了什么?
感谢 艾萨克
不确定您的问题您实际上使服务交互比需要更复杂。由于该服务是本地服务,因此您可以直接与其通话,并在完成时通知您的活动,而无需广播Intent并使用Receiver进行收听。退房http://stackoverflow.com/questions/3197335/android-restful-api-service/3197456#3197456 –
谢谢,我只是改变我的代码与接收器一起工作,它完美的作品。 –
好主题讨论 http://stackoverflow.com/questions/4233873/how-to-get-extra-data-from-intent-in-android –