未调用 BroadcastReceiver (Kotlin)

BroadcastReceiver not called (Kotlin)

我有一个 class 继承自 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)

}

但是当我打开 off/on Wi-Fi 或移动数据时它没有被调用。有什么建议吗?

那是系统广播。您通过在 Context 上调用 registerReceiver() 为它注册接收器,而不是在 LocalBroadcastManager 单例上。

另请注意:

  • 您不需要请求INTERNET作为运行时权限

  • 虽然 READ_PHONE_STATE 是一个 dangerous 权限并且您必须在运行时请求权限,但 requestPermissions() 是异步的,因此您可能还没有该权限到时候 requestPermissions() returns