У меня есть приемник onBootCompleted, зарегистрированный в манифесте. Он запускает MyService. Моя служба в onCreate динамически регистрирует еще 3 широковещательных приемника. В 3 новых ресиверов фильтр на следующих намерениях действийПочему динамическая регистрация широковещательного приемника не работает после перезагрузки
- LOCALE_CHANGED,
- TIMEZONE_CHANGED и
- CONNECTIVITY_CHANGED.
Это работает правильно, когда я запускаю приложение из Eclipse, но после перезагрузки устройства и запуска моего сервиса никто из приемников не работает.
У меня есть работа вокруг реализации, но я хотел бы знать, почему это происходит?
Manifest:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<receiver android:name=".receiver.BootCompletedReceiver" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<category android:name="android.intent.category.HOME" />
</intent-filter>
</receiver>
<service
android:name=".MyService"
android:enabled="true"
android:exported="false"
android:stopWithTask="false" >
</service>
Услуги:
public class MyService()
{
LocationTimeZoneChangedReceiver mLocationTimeZoneChangedReceiver = new LocationTimeZoneChangedReceiver()
NetworkChangedReceiver mNetworkChangedReceiver = new NetworkChangedReceiver()
public void onCreate()
{
registerReceiver(mLocationTimeZoneChangedReceiver, new IntentFilter(Intent.ACTION_LOCALE_CHANGED));
registerReceiver(mLocationTimeZoneChangedReceiver, new IntentFilter(Intent.ACTION_TIMEZONE_CHANGED));
registerReceiver(mNetworkChangedReceiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
}
}
BootCompletedReceiver:
public class BootCompletedReceiver extends BroadcastReceiver
{
public void onReceive(Context context, Intent intent){}
}
MyApplication:
public class MyApplication extends Application
{
ServiceConnection mServiceConnection = new ServiceConnection() { anonymous class...}
public void onCreate()
{
bindService(new Intent(this, MyService.class), mServiceConnection,Context.BIND_AUTO_CREATE);
}
}
Отредактировано: Отредактированный код для Plinio.Santos.
Это большое приложение со многими движущимися частями, поэтому в лучшем случае я могу опубликовать небольшие фрагменты кода.
Ниже приведены шаги, которые я имею следующие тестировании:
- Push-приложение с помощью Eclipse,
- тест, приемник изменения сети работает
- отпуск WiFi от
- Теперь перезагрузите устройство
- дождитесь начала процесса и включения Wi-Fi.
Ваша служба запускает все эти 3 при перезагрузке? – Saqib
Да в службе onCreate() У меня было до реализации моего обходного пути следующее. 'registerReceiver (mLocationTimeZoneChangedReceiver, новый IntentFilter (Intent.ACTION_LOCALE_CHANGED)); \t registerReceiver (mLocationTimeZoneChangedReceiver, новый IntentFilter (Intent.ACTION_TIMEZONE_CHANGED)); registerReceiver (mNetworkChangedReceiver, новый IntentFilter (ConnectivityManager.CONNECTIVITY_ACTION)); ' Я включил и выключил Wi-Fi после перезапуска устройства и не видел ни одного журнала из-за изменения соединения во время работы моего приложения. – TealFawn
Ответ на D_Vaibhav, я не понимаю, что приемники запускать, когда процесс приложения не запущен, и, зарегистрировав их в манифесте, изменение wifi запустит все приложение без необходимости в некоторых случаях. – TealFawn