0

我在Android项目中尝试Kotlin。我的活动中有一个广播接收器用于网络更改事件。代码如下:registerReceiver()为重载方法显示错误

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") 
    } 

} 

我没有看到它的任何问题。但我的科特林插件显示我以下错误:

的以下功能都不能在提供

enter image description here

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

回答

2

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

registerReceiver(
      networkChangeReceiver, 
      IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION) 
    )