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