У меня есть служба, эта служба запускает Thread, который запускает AsyncTask и переопределяет метод onProgressUpdate. В этом методе я отправляю сообщение своему локальному приемнику.Android: LocalBroadcastReceiver не работает
Intent intent = new Intent("BookDownloadService");
// You can also include some extra data.
intent.putExtra("bookID", book.bookID);
intent.putExtra("maxValue", update[1]);
intent.putExtra("currentValue", update[0]);
LocalBroadcastManager.getInstance(getApplicationContext()).sendBroadcast(intent);
И в моей деятельности я хочу получить данные.
LocalBroadcastManager.getInstance(context).registerReceiver(new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
int bookId = intent.getIntExtra("bookID", 1);
int maxValue = intent.getIntExtra("maxValue", 10);
int currentValue = intent.getIntExtra("currentValue", 0);
boolean isFinish = intent.getBooleanExtra("isFinish", false);
Log.d("Receiver Buch " + bookId, currentValue + " von " + maxValue + " finish: " + isFinish);
}
}, new IntentFilter("BookDownloadService"));
но ничего не происходит. нет сообщений журнала или ошибок.
см http://developer.android.com/reference/android/os/AsyncTask.html, раздел ** правила многопоточности ** – pskink
весь мой другой код внутри него работает. – Phillipp
Замените «AsyncTask' на« Thread »(или используйте« IntentService », в зависимости от характера сервиса). В этом случае вам не нужен «AsyncTask», поскольку «LocalBroadcastManager» уже отправляет свои сообщения в основной поток приложений. Просто вызовите 'sendBroadcast()' из потока. Помимо этого добавьте протоколирование или точки останова, чтобы убедиться, что два сегмента кода, которые вы перечисляете выше, действительно выполняются. Например, 'onProgressUpdate()' в 'AsyncTask' вызывается только, если вы вызываете' publishProgress() '. – CommonsWare