Намерение не получено действием

У меня есть основное действие, которое запускает службу для выполнения веб-поиска в фоновом режиме, и я хотел бы, чтобы основное действие получало намерение при выполнении поиска.

В моей основной деятельности я определил 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);

       ...

В службе я выполняю поиск, и когда он выполнен, я отправляю Intent:

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 получателя - нет (проверено отладчиком).

Я предполагаю, что, поскольку я создаю фильтр динамически, мне не нужно определять фильтр в файле манифеста.

Я делаю что-то неправильно ?

Спасибо, Исаак.


person Isaac K.    schedule 02.03.2011    source источник
comment
Не уверен в своем вопросе На самом деле вы усложняете взаимодействие со службой, чем оно должно быть. Поскольку служба является локальной службой, вы можете напрямую с ней общаться и получать уведомления о вашей активности, когда она завершается, без необходимости транслировать намерение и прослушивать с помощью приемника. Проверьте stackoverflow.com/questions/3197335/android- restful-api-service/   -  person Robby Pond    schedule 03.03.2011
comment
Спасибо, я только что изменил свой код для работы с приемником, и он отлично работает.   -  person Isaac K.    schedule 03.03.2011
comment
Хорошее обсуждение темы в stackoverflow.com/questions/4233873/   -  person Alexey Vassiliev    schedule 09.06.2012


Ответы (1)


В порядке. Ну, я только что проверил свой, и мы делаем это так же, однако ...

ImageSearchService.SEARCH_RESULT_ACTION

Попробуйте выполнить com.yourpackagename.ImageSearchSrvice.SEARCH_RESULT_ACTION

где SEARCH_RESULT_ACTION — общедоступная статическая строковая переменная. Посмотрите, поможет ли это.

Я думаю, что это должно быть наименование ДЕЙСТВИЯ. Также обратите внимание, что вы можете запустить точки останова и просто проверить журнал. выполните намерение.getAction() и распечатайте это, а не проверяйте внутри оператора if. Просто всегда распечатывайте и смотрите. Не нужно ломать вещательный приемник, через некоторое время он выйдет из строя.

person PostScripting    schedule 02.03.2011