Ответ 1
два способа регистрировать широковещательные приемники в Android:
- в коде (ваш случай)
- в AndroidManifest.xml
Позвольте мне объяснить различия.
Случай 1 (широковещательный приемник, зарегистрированный в коде)
Вы будете получать только широковещательные сообщения, если контекст, где вы зарегистрировали ваш ресивер, в живом. Поэтому, когда активность или приложение убито (в зависимости от того, где вы зарегистрировали ваш ресивер), вы больше не будете получать.
Я предполагаю, что вы зарегистрировали широковещательный приемник в контексте активности, который не очень хороший подход. Если вы хотите зарегистрировать широковещательный приемник для своего контекста приложения, вы можете сделать что-то вроде этого:
getApplicationContext().registerReceiver(m_gpsChangeReceiver, new IntentFilter(LocationManager.PROVIDERS_CHANGED_ACTION));
Случай 2 (широковещательный приемник, зарегистрированный в AndroidManifest.xml)
Вы будете получать трансляции, даже если ваше приложение убито (система запустит ваше приложение). Это правильный подход, когда вы хотите получать трансляции независимо от того,, если ваше приложение работает.
Добавьте этот ресивер в свой AndroidManifest.xml:
<receiver android:name="com.yourpackage.NameOfYourBroadcastReceiver">
<intent-filter>
<action android:name="android.location.PROVIDERS_CHANGED" />
</intent-filter>
</receiver>
EDIT: Некоторые специальные трансляции (т.е. SCREEN_ON или SCREEN_OFF) должны быть зарегистрированы в коде (случай 1), иначе они не будут доставлены в ваше приложение.