java - registerReceiver() 显示重载方法的错误

标签 java android broadcastreceiver kotlin kotlin-android-extensions

我在我的 Android 项目中尝试使用 Kotlin。我的 Activity 中有一个用于网络更改事件的广播接收器。代码如下:

BaseActivity.kt

  abstract class BaseActivity : AppCompatActivity() {

        private val networkChangeReceiver = NetworkChangeReceiver()


        override fun onStart() {
            super.onStart()
            registerReceiver(
                    receiver = networkChangeReceiver,
                    intentFilter = IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)
            )
        }

        override fun onStop() {
            super.onStop()
            unregisterReceiver(receiver = networkChangeReceiver)
        }
    }

NetworkChangeReceiver.kt

class NetworkChangeReceiver : BroadcastReceiver() {

    override fun onReceive(context: Context?, intent: Intent?) {
          Log.e("network changed")
    }

}

我看不出有什么问题。但是我的 kotlin 插件显示以下错误:

不能使用提供的参数调用以下函数

enter image description here

为第一个提供的参数是正确的 ASAFIK。我不是 Kotlin 专家,只是为了好玩而学习。这是 Kotlin 的预期行为,插件错误还是我遗漏了什么?谁能解释一下?

最佳答案

首先,参数名为 filter 而不是 intentFilter,如果您更正此参数,则会出现另一个错误。其中说:“非 Kotlin 函数不允许使用命名参数” 原因是方法 public Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter) 来自 Android 并用 java 编写。删除名称应该可以正常工作:

registerReceiver(
            networkChangeReceiver,
            IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)
    )

关于java - registerReceiver() 显示重载方法的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41190327/

相关文章:

java - Android 工具链上没有可链接的 JNI 库

Android Spinner - 自定义背景

java - 更新 Listview Item Android Firebase 的值

android - 将消息从数据库移动到收件箱

android - 网络小区更改时未调用 ACTION_PHONE_STATE_CHANGED

java - 继承和组合如何选择?

java - hibernate 中的 OneToOne - 未知 "mappedBy"

Android 服务在重启时不保留数据

java - 监听器执行多次的效果

java - 表单验证错误后的Spring MVC(既不是BindingResult也不是bean名称的普通目标对象)