1
我在清單中註冊了onBootCompleted廣播接收器。 它運行啓動MyService。我的onCreate服務動態註冊3個廣播接收器。 的3點新的接收器以下的意圖行動爲什麼在重新啓動後動態註冊廣播接收器不工作
- LOCALE_CHANGED,
- TIMEZONE_CHANGED和
- CONNECTIVITY_CHANGED過濾。
這些工作正常,當我從Eclipse運行應用程序,但重新啓動設備後,我的服務啓動沒有接收器工作。
我有一個工作實施,但我想知道爲什麼會發生這種情況?
清單:
<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的編輯代碼。
這是一個有很多移動部件的大應用程序,所以我最多可以發佈小代碼片段。
以下是我下面的測試步驟:通過Eclipse
- 推送應用,
- 測試網絡更改接收器工作
- 假的wifi關閉
- 現在重新啓動設備
- 等待進程啓動並打開wifi。
您的服務是否在重新啓動時全部啓動3個? – Saqib
是的在服務onCreate() 我在實施我的解決方法之前有以下。 'registerReceiver(mLocationTimeZoneChangedReceiver,new IntentFilter(Intent.ACTION_LOCALE_CHANGED)); \t registerReceiver(mLocationTimeZoneChangedReceiver,new IntentFilter(Intent.ACTION_TIMEZONE_CHANGED)); registerReceiver(mNetworkChangedReceiver,new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));' 重啓設備後,我會打開和關閉wifi,並且在我的應用程序進程運行時沒有看到連接更改中的任何日誌。 – TealFawn
回覆D_Vaibhav,我沒有在應用程序進程沒有運行時運行的接收器,並且通過在清單中註冊它們,在某些情況下,wifi更改將無需啓動整個應用程序。 – TealFawn