我在我的 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 插件显示以下错误:
不能使用提供的参数调用以下函数
为第一个提供的参数是正确的 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/