未调用 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
我有一个 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