Wpis z mikrobloga

Mireczki, jak w sposób właściwy i zasadny rejestrować broadcast receiver opierający się na networku aby ten działał w tle cały czas, podczas wyłączonej aplikacji również.
Jaki mam problem:
Do momentu gdy się z aplikacji korzystało z androida mniejszego niż 7.0, nie było z tym problemu, ponieważ rejestracja broadcast receivera była w manifeście. Od 7.0, musiała zostac wyniesiona do innego miejsca (mimo wszystko dalej mam w manifeście również), i w tej chwili robię to tak:

if (Build.VERSION.SDKINT >= Build.VERSIONCODES.N) {
getActivity().registerReceiver(networkService, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
}

Problem polega na tym, że ja go rejestruje pod danym przyciskiem, pod którym dzieją się jeszcze inne ważne rzeczy w zwiazku z czym nie mogę go przenieść w inne miejsce. I tu się pojawia problem, ponieważ jeśli ktoś kilka razy kliknie przycisk, wtedy kilka tych serwisów się zarejestruje jednocześnie, a przy zamykaniu activity dostanę wtedy error o

ActivityLauncher has leaked IntentReceiver pl.app.services.NetworkService@ea78e82 that was originally registered here. Are you missing a call to unregisterReceiver()?

Gdy odrejestruje receiver podczas zabijania activity, wtedy on nie działa, więc musi tak mi się wydaje tam zostać. Jak uniknąć wielokrotnego rejestrowania receivera? Czy wrzucenie boola z informacją, że ten receiver został zarejestrowany do sharedpreferences pomoże, ale co się stanie w przypadku jeśli nagle z jakiegoś powodu ten receiver zdechnie, a ja dalej będę miał info w preferences że jest zarejestrowany

#programowanie #androiddev
  • 4
@AndroidKuc: Generalnie używam jednego receivera do obsługi połączeń przychodzących/wychodzących, a drugiego do przechwytywania włączenia/wyłączenia internetu. Sprawdzę to co podałeś. Dzięki :)