繁体   English   中英

无法覆盖Kotlin中的Java函数

[英]Cannot override Java function in Kotlin

我目前正在使用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 */
    }

这很好用。

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

fun onConnectionUpdated(gatt: BluetoothGatt, interval: Int, latency: Int, timeout: Int, status: Int) {
    /* do stuff */
}

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

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

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

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

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

黑暗灰名单

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

黑名单 :无论目标SDK如何都受限制。 该平台的行为就像界面不存在一样。 例如,每当应用程序尝试使用它时,它都会抛出NoSuchMethodError / NoSuchFieldException,并且当应用程序想要知道特定类的字段/方法列表时,它不会包含它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM