从MainActivity范围调用函数

时间:2019-07-12 22:38:14

标签: android kotlin

在我的Android应用中,我在MainActivity范围内定义了一个函数,如下所示:

class MainActivity : AppCompatActivity() {
     fun connectWebSocket() { }
}

这是因为我想在runOnUiThread函数中使用connectWebSocket()

在另一个BroadcastReceiver()中,我试图将此connectWebSocket()称为:

class MyLocationService : BroadcastReceiver() {
    connectWebSocket()
}

但是我失败了,并得到了这个错误:

  

未解决的参考:connectWebSocket

我该如何解决?

2 个答案:

答案 0 :(得分:0)

要在其他组件中使用活动范围方法,我们可以使用它的静态引用,如下所示:

class MyLocationService : BroadcastReceiver() {
    companion object {
       var mainActivity: MainActivity? = null
    }
    fun do () {
       mainActivity?.connectWebSocket()
    }
    fun clean() {
        MyLocationService.mainActivity = null
    }
}

class MainActivity : AppCompatActivity() {

     init() {
        MyLocationService.mainActivity = this
     }
}

答案 1 :(得分:0)

在广播接收器中,您具有带有上下文参数的onReceive方法,可以将其强制转换为活动并调用connectWebSocket()

   @Override
    public void onReceive(Context context, Intent intent) 
    {
        if(context instance MainActivity){
        ((MainActivity)context).connectWebSocket()
        }
    }