BroadcastReceiver внутри Сервиса не получает трансляции Android - PullRequest
4 голосов
/ 09 марта 2012

У меня есть это приложение, в котором пользователи обновляют определенные переменные в Activity, и эта Activity передает новые переменные в IntentService с помощью BroadcastReceiver. Однако BroadcastReceiver в IntentService, похоже, не получает широковещательные сообщения. Это код внутри службы для создания приемника вещания

protected class UpdateReceiver extends BroadcastReceiver{
    @Override
    public void onReceive(Context context, Intent intent){
        Log.d("receiver", "Got message: ");
        //state=3;
        //Toast.makeText(context, "got it", Toast.LENGTH_SHORT).show();
    }
};

А вот код для регистрации получателя в функции onHandle ()

IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("updates");
UpdateReceiver lol = new UpdateReceiver();
DetectService.this.registerReceiver(lol, intentFilter);

Наконец, вот код для отправки трансляции из действия

Intent broadcastIntent = new Intent();
broadcastIntent.setAction("updates");
HomePageActivity.this.sendBroadcast(broadcastIntent);
Log.d("sender", "send msg");

Когда я включаю приемник в то же действие, что и вещательная часть, он работает, но не тогда, когда я помещаю его в IntentService. Помогите пожалуйста!

В другой связанной заметке я попытался использовать LocalBroadcastManager в этом проекте, поскольку все трансляции локальные, но затмение не может импортировать класс совместимости. Я уже установил его с помощью Android SDK manager. Есть ли что-то, что я делаю здесь не так?

Ответы [ 2 ]

4 голосов
/ 09 марта 2012

это действие передает новые переменные в IntentService с помощью BroadcastReceiver.

Это не имеет смысла.Используйте startService() для отправки команды на IntentServiceIntentService не должно иметь BroadcastReceiver, потому что IntentService будет уничтожено, как только onHandleIntent() завершится, и, следовательно, никогда не получит передачу.

Я пытался использоватьLocalBroadcastManager в этом проекте, так как все трансляции локальные, но затмение не может импортировать класс совместимости.

:: shrug ::

Здесьпример проекта с файлами проекта Eclipse, который использует LocalBroadcastManager.При создании проекта я не встречал особых проблем с Eclipse.

2 голосов
/ 09 марта 2012
protected class UpdateReceiver extends BroadcastReceiver{
    @Override
    public void onReceive(Context context, Intent intent){
        Log.d("receiver", "Got message: ");
        //state=3;
        //Toast.makeText(context, "got it", Toast.LENGTH_SHORT).show();
    }
};

В методе onCreate () или, где это уместно.

mReceiver = new UpdateReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction("<your receivers intent goes here>");
this.registerReceiver(mReceiver, filter);

Теперь у вас должна быть возможность отправить трансляцию, и она будет принята.

Intent intent = new Intent("<your receivers intent goes here>");
// Add what you want to add to the intent right here.
<context-handle>.sendBroadcast(intent);
...