Oznacza to, że mam ten BroadcastReceiver, który tworzę w locie, aby odsłuchać jeden broadast, po czym chcę go wyrejestrować.Czy można wyrejestrować "dynamiczny" program BroadcastReceiver z własnej metody onReceive() odbiornika?
Nie znalazłem żadnego kodu przykładowego, który robi to w ten sposób, ale też nie znalazłem żadnej reguły w androidowych dokumentach online, które zabraniają tego. Ale nie mogę pozwolić, aby zwlekał tak długo, jak działanie, i to jest w anonimowej klasie tak, więc klasa zawierająca nawet nie zna nazwy zmiennej.
Oznacza to, że kod wygląda mniej więcej tak:
myInfoReceiver = new BroadcastReceiver() {
onReceive(Context ctx, Intent intt) {
// do some Notification when I get here
nm.notify("I got here") // obvious pseudo code
ctx.unregisterReceiver(myInfoReceiver);
} // end onReceive
ctx.registerReceiver),uInfoReceiver, new IntentFilter(...));
}; // end BroadcastReceiver
Ale gdy uruchamiam to, Android narzeka gdy wywołuje wyrejestrować, podkreślając, że odbiornik nie jest tam, aby wyrejestrować (nie pamiętam dokładnego brzmienia, ale wyrzucił wyjątek IllegalArgumentException).
Próbowałem także zmodyfikować kod, aby sprawdzić, czy akcja w "intt" jest taka sama, jak oczekiwano - ale potem nadal wykonuje test onReceive, ale po cichu się nie wyrejestruje.
Co cel do ciebie chcesz osiągnąć? Przypuszczam, że 'BroadcastReceiver' może być złym wyborem dla twojego problemu. Jeśli chcesz wykonać operację raz i chcesz uniezależnić ją od cyklu życia aktywności, rozważ użycie 'IntentService' lub' Service' z szyną zdarzeń (np. Otto). –
Nie użyłbym IntentService itp., Ponieważ większy system, który jest częścią już ma zamiar transmisji, reprezentujący dokładnie żądaną informację. Ponadto nie potrzebuję takiej niezależności od cyklu życia. Jestem już w wątku UI czekającym na ten zamiar, nic nie robiąc, ale pokazując okno postępu. –