我有一个主要活动,它启动一项服务以在后台进行网络搜索,我希望主要活动在搜索完成后获得意图。
在我的主要活动中,我定义了一个BroadcastReceiver和一个Intent Filter来收听“搜索结束”意图:
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不是(用调试器检查)。
我假设因为我动态创建了过滤器,所以我不需要在清单文件中定义过滤器。
我做错了吗?
由于 艾萨克
答案 0 :(得分:0)
确定。好吧,我刚检查了我的,我们也是这样做的,但是......
ImageSearchService.SEARCH_RESULT_ACTION
尝试做com.yourpackagename.ImageSearchSrvice.SEARCH_RESULT_ACTION
其中SEARCH_RESULT_ACTION是公共静态字符串变量。看看是否有帮助。
我认为一定是ACTION的命名。另请注意,您可能希望运行tru断点并只检查日志。做intent.getAction()并打印出来而不是检查if语句。只需要打印出来看看。不需要在broacast接收器内部打破它会在一段时间后崩溃。