我有一个继承自 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 或移动数据时它不会被调用。有什么建议吗?
最佳答案
那是系统广播。您通过在 Context
上调用 registerReceiver()
为它注册接收器,而不是在 LocalBroadcastManager
单例上。
另请注意:
您不需要请求
INTERNET
作为运行时权限READ_PHONE_STATE
是一种危险
权限并且您必须在运行时请求权限,requestPermissions()
是异步的,因此requestPermissions()
返回时您可能还没有该权限
关于android - 未调用 BroadcastReceiver (Kotlin),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51694770/