android - 未调用 BroadcastReceiver (Kotlin)

标签 android kotlin broadcastreceiver

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

相关文章:

java - Android Studio 表格布局中增加列

Kotlin 'unsafe call on nullable receiver' 空检查后编译错误

android - 检测传入的 SMS 消息

android - 拔下耳机时暂停 ExoPlayer

android - BroadcastReceiver 多次触发 (PROVIDERS_CHANGED_ACTION)

android - 样式化 SeekBarPreference 以与 SwitchPreference 保持一致

android - 如何在 android 惰性列表应用程序中使用字节图像 [] 数组而不是字符串字符串 [] 数组

android - 在 cordova 堆栈中升级损坏的启动模拟器

android - 如何使用可组合内的参数初始化 Koin View 模型?

java - 在 Kotlin 中将嵌套 Map 复制到 MutableMap