BroadcastReceiver не вызывается (Kotlin)

У меня есть класс, унаследованный от BroadcastReceiver()

class ConnectivityReceiver : BroadcastReceiver() {
    override fun onReceive(context: Context?, intent: Intent?) {
        Log.d("Connection", "onReceive")
        if(ConnectionDetector(context!!).isConnectingToInternet) {
             Log.d("Connection", "Connected To Internet")
        }
        else {
             Log.d("Connection", "Not Connected To Internet")
        }
    }
}

И в MainActivity я пытаюсь зарегистрировать его

private val receiver = ConnectivityReceiver()

private fun registerreciver() {
    ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.INTERNET),1)
    ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.ACCESS_NETWORK_STATE),1)
    val filter = IntentFilter()
    filter.addAction("android.net.conn.CONNECTIVITY_CHANGE")
    LocalBroadcastManager.getInstance(this).registerReceiver(receiver, filter)
}
override fun onDestroy() {
    super.onDestroy()
    LocalBroadcastManager.getInstance(this).unregisterReceiver(receiver)

}

Но он не вызывается, когда я выключаю/включаю Wi-Fi или мобильные данные. Какие-либо предложения?


person Nikita .    schedule 05.08.2018    source источник


Ответы (1)


Это системная трансляция. Вы регистрируете для него приемник, вызывая registerReceiver() на Context, а не на LocalBroadcastManager синглтоне.

Также обратите внимание, что:

  • Вам не нужно запрашивать INTERNET в качестве разрешения во время выполнения.

  • В то время как READ_PHONE_STATE — это разрешение dangerous, которое вы должны запрашивать во время выполнения, requestPermissions() является асинхронным, поэтому к моменту возврата requestPermissions() у вас может еще не быть этого разрешения.

person CommonsWare    schedule 05.08.2018