无法覆盖Kotlin中的Java函数

ami*_*one 4 java android kotlin bluetooth-lowenergy

我目前正在使用Kotlin开发针对API 27的支持BLE的Android应用.

我试图覆盖其中的一个函数android.bluetooth.BluetoothGatt.可以覆盖许多回调以启用某些BLE事件的处理.

例如,我onConnectionStateChange()以下列方式覆盖:

private val bluetoothGattCallback = object : BluetoothGattCallback() {

    override fun onConnectionStateChange(gatt: BluetoothGatt, status: Int, newState: Int) {
        /* do stuff */
    }
Run Code Online (Sandbox Code Playgroud)

这很好用.

我的问题源于试图覆盖onConnectionUpdated().此回调的定义方式onConnectionStateChange()BLE API源中的定义相同,那么为什么我不能覆盖它呢?这就是我试图覆盖它的方式(仍在BluetoothGattCallback()对象中):

fun onConnectionUpdated(gatt: BluetoothGatt, interval: Int, latency: Int, timeout: Int, status: Int) {
    /* do stuff */
}
Run Code Online (Sandbox Code Playgroud)

编辑:我忘了提到,当我添加override关键字时,它提供了错误消息:OnConnectionUpdated overrides nothing..

原谅我的天真,我不经常与Kotlin/Java合作,谢谢.

leo*_*mer 8

您不应该使用此方法,它仅供内部使用而不是公共API的一部分.因此它是隐藏的@hide.有关@hide以及如何访问它的更多信息,请参阅Android源代码中的@hide是什么意思?

请注意,使用反射如上面在描述链接来访问它不鼓励

您要使用的方法是在暗灰色列表上,具有以下限制:

黑暗灰名单:

  • 对于目标SDK低于API级别28的应用:
    允许每次使用深色灰名单界面.
  • 目标SDK为API级别28或更高级别的应用程序:与黑名单相同的行为

黑名单:无论目标SDK如何都受限制.平台的行为就像接口不存在一样.例如,它会抛出每当应用程序试图使用它的NoSuchMethodError/NoSuchFieldException,当应用程序需要知道特定类的字段/方法列表将不包括它.