2014-08-28 2 views
1

У меня есть служба, эта служба запускает 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")); 

но ничего не происходит. нет сообщений журнала или ошибок.

+0

см http://developer.android.com/reference/android/os/AsyncTask.html, раздел ** правила многопоточности ** – pskink

+0

весь мой другой код внутри него работает. – Phillipp

+0

Замените «AsyncTask' на« Thread »(или используйте« IntentService », в зависимости от характера сервиса). В этом случае вам не нужен «AsyncTask», поскольку «LocalBroadcastManager» уже отправляет свои сообщения в основной поток приложений. Просто вызовите 'sendBroadcast()' из потока. Помимо этого добавьте протоколирование или точки останова, чтобы убедиться, что два сегмента кода, которые вы перечисляете выше, действительно выполняются. Например, 'onProgressUpdate()' в 'AsyncTask' вызывается только, если вы вызываете' publishProgress() '. – CommonsWare

ответ

0

Вы должны зарегистрироваться/разрегистрировать приемник ...

(onPause) 
LocalBroadcastManager.getInstance(this).unregisterReceiver(mReceiver); 

(onResume) 
LocalBroadcastManager.getInstance(this).registerReceiver(mReceiver, <your intentFilter>); 
+0

Посмотрите мой код. я зарегистрирую его. – Phillipp

+0

Я этого не вижу. Д-р ... теперь я делаю. –

+0

Что делать, если мне нужно сделать это из контекста приложения? –

Смежные вопросы