1

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

基本活动.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 插件向我显示了以下错误:

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

在此处输入图像描述

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

4

1 回答 1

3

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

registerReceiver(
            networkChangeReceiver,
            IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)
    )
于 2016-12-16T22:37:19.083 回答