Невозможно переопределить функцию Java в Kotlin - PullRequest
0 голосов
/ 11 октября 2018

В настоящее время я использую Kotlin для разработки API-приложения для Android с поддержкой BLE 27.

Я пытаюсь переопределить функцию в android.bluetooth.BluetoothGatt.Есть ряд обратных вызовов, которые можно переопределить, чтобы включить обработку определенных событий BLE.

Например, я переопределяю onConnectionStateChange() следующим образом:

private val bluetoothGattCallback = object : BluetoothGattCallback() {

    override fun onConnectionStateChange(gatt: BluetoothGatt, status: Int, newState: Int) {
        /* do stuff */
    }

Это прекрасно работает.

Моя проблема связана с попыткой переопределить onConnectionUpdated().Этот обратный вызов определяется так же, как onConnectionStateChange() в исходном BLE API-источнике , так почему же я не могу его переопределить?Вот как я пытаюсь переопределить его (все еще в объекте BluetoothGattCallback()):

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

РЕДАКТИРОВАТЬ: я забыл упомянуть, что, когда я добавляю ключевое слово override, оно обеспечиваетсообщение об ошибке: OnConnectionUpdated overrides nothing..

Простите за наивность, я не часто работаю с Kotlin / Java, спасибо.

1 Ответ

0 голосов
/ 11 октября 2018

Вы не должны использовать этот метод, он только для внутреннего использования и не является частью общедоступного API.Поэтому он скрыт через @hide.Для получения дополнительной информации о @hide и о том, как получить к ней доступ независимо от этого, см. Что означает @hide в исходном коде Android?

Обратите внимание, что использование отражения для доступа к нему, как описано в ссылке выше не рекомендуется

Метод, который вы хотите использовать, находится на dark-greylist со следующими ограничениями :

dark-greylist :

  • Для приложений, чей целевой SDK ниже уровня API 28: разрешено каждое использование темного
    интерфейса серого списка.
  • приложения с целевым SDK уровня API 28 или выше: такое же поведение, как у черного списка

черный список : ограничено независимо от целевого SDK.Платформа будет вести себя так, как будто интерфейс отсутствует.Например, он будет выдавать исключение NoSuchMethodError / NoSuchFieldException всякий раз, когда приложение пытается его использовать, и не будет включать его, когда приложение хочет знать список полей / методов определенного класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...