2011-03-02 47 views
0

我有一个主要活动,启动服务在后台做一个网页搜索,我希望主要活动获得一个意图,当搜索完成。意图没有收到活动

在我的主要活动中,我定义了一个广播接收器和意图过滤器来听的意图“搜索结束”:

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没有(使用调试器进行检查)。

我认为,因为我动态创建过滤器,我不需要在清单文件中定义一个过滤器。

我做错了什么?

感谢 艾萨克

+1

不确定您的问题您实际上使服务交互比需要更复杂。由于该服务是本地服务,因此您可以直接与其通话,并在完成时通知您的活动,而无需广播Intent并使用Receiver进行收听。退房http://stackoverflow.com/questions/3197335/android-restful-api-service/3197456#3197456 –

+0

谢谢,我只是改变我的代码与接收器一起工作,它完美的作品。 –

+0

好主题讨论 http://stackoverflow.com/questions/4233873/how-to-get-extra-data-from-intent-in-android –

回答

0

确定。嗯,我刚才检查我,我们都在做同样的方式,不过...

ImageSearchService.SEARCH_RESULT_ACTION

尝试做com.yourpackagename.ImageSearchSrvi​​ce.SEARCH_RESULT_ACTION

其中SEARCH_RESULT_ACTION是一个公共静态字符串变量。看看是否有帮助。

我认为它必须是ACTION的命名。另外请注意,您可能想要运行tru断点并检查日志。做intent.getAction()并打印出来而不是检查if语句。只是总是打印出来看看。不需要在Broacast接收器内部破碎,它会在一段时间后崩溃。