Проверка подключения не работает в Android Oreo Kotlin

Попытка вызова широковещательного приемника, называемого NetworkReceiver, при изменении сети. Тот же код в java работает, но не работает при попытке сделать это в Kotlin. Приемник никогда не вызывается, когда соединение происходит или когда оно потеряно. Я пытаюсь сделать это в эмуляторе. Также приемник не вызывается, когда загрузка завершена. Также Im тестирует это на Android Oreo, т.е. Android 8.0

NetworkReceiver.kt 
 class NetworkReceiver : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { Logs.v("onReceive") val connectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager val networkInfo = connectivityManager.activeNetworkInfo if (networkInfo != null && networkInfo.detailedState == NetworkInfo.DetailedState.CONNECTED) { Logs.v("Network Connected") } else if (networkInfo != null) { val state = networkInfo.detailedState Logs.v("NetworkReceiver", state.name) } else { Logs.v("Network Connected") } } } 

manifest.xml

 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.test.android.client"> <!-- To auto-complete the email text field in the login form with the user's emails --> <uses-permission android:name="android.permission.GET_ACCOUNTS" /> <uses-permission android:name="android.permission.READ_PROFILE" /> <uses-permission android:name="android.permission.READ_CONTACTS" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <application android:name=".application.App" android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <receiver android:name=".network.NetworkReceiver"> <intent-filter> <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> <action android:name="android.intent.action.BOOT_COMPLETED" /> <action android:name="android.net.wifi.WIFI_STATE_CHANGED" /> </intent-filter> </receiver> <activity android:name=".views.activities.kt.LoginActivity" android:label="@string/app_name" android:theme="@style/AppTheme.NoActionBar"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".views.activities.kt.DashboardActivity" android:label="@string/title_activity_dashboard" android:theme="@style/AppTheme.NoActionBar" /> <activity android:name=".views.activities.kt.ConfigurationActivity" android:label="@string/title_activity_configuration" android:theme="@style/AppTheme.NoActionBar"/> </application> </manifest> 

Для этого вам необходимо это разрешение для прослушивания:

 <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> 

Попробуйте объявить свой приемник вещания в манифесте таким образом:

 <receiver android:name=".network.NetworkReceiver" android:enabled="true" android:exported="false"> <intent-filter> <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/> <action android:name="android.intent.action.BOOT_COMPLETED"/> <action android:name="android.intent.action.QUICKBOOT_POWERON" /> <action android:name="android.net.wifi.WIFI_STATE_CHANGED"/> </intent-filter> </receiver> 

В Oreo поведение вещательного приемника изменилось, оно гораздо более ограничено. Я удивлен, что вы говорите «это работает в java».

Независимо от того, вам нужно будет ознакомиться с изменениями «Oreo». И в вашем приложении не хватает пары вещей. Вам нужно установить android:enabled="true" в манифесте на вашем ресивере, и вам нужно позвонить …

 registerReceiver(MyNetworkReceiver(), IntentFilter("android.net.conn.CONNECTIVITY_CHANGE"))` 

… из вашего приложения (возможно, в onCreate), чтобы получать изменения состояния соединения во время работы вашего приложения (он также запускается при запуске приложения). Вам также может потребоваться установить android:export="true" в манифесте (для приема трансляций из белых списков).