У меня есть основное действие, которое запускает службу для поиска в Интернете в фоновом режиме, и я хотел бы, чтобы основное действие получило намерение, когда поиск будет завершен.
В своей основной деятельности я определил 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 получателя нет (проверяется отладчиком).
Я предполагаю, что, поскольку я создаю фильтр динамически, мне не нужно определять фильтр в файле манифеста.
Я что-то не так делаю?
Спасибо
Исаак