Actualmente estoy desarrollando una aplicación para Android BLE habilitados para la orientación de la API 27 usando Kotlin.
Estoy intentando anular una función dentro android.bluetooth.BluetoothGatt
. Hay una serie de devoluciones de llamada disponibles para ser anulado para permitir la manipulación de ciertos eventos BLE.
Por ejemplo, puedo reemplazar onConnectionStateChange()
de la siguiente forma:
private val bluetoothGattCallback = object : BluetoothGattCallback() {
override fun onConnectionStateChange(gatt: BluetoothGatt, status: Int, newState: Int) {
/* do stuff */
}
Esto funciona muy bien.
Mi problema radica en tratar de anular onConnectionUpdated()
. Esta devolución de llamada se define de la misma manera que onConnectionStateChange()
en la fuente de API BLE , así que ¿cómo es que no puedo cancelar? Esta es la forma en que estoy tratando de anularlo (todavía dentro del BluetoothGattCallback()
objeto):
fun onConnectionUpdated(gatt: BluetoothGatt, interval: Int, latency: Int, timeout: Int, status: Int) {
/* do stuff */
}
EDIT: se me olvidó mencionar que, cuando agrego la
override
palabra clave que proporciona el mensaje de error:OnConnectionUpdated overrides nothing.
.
Perdona mi ingenuidad, no suelen trabajar con Kotlin / Java, gracias.
Usted no debe usar este método, es sólo para uso interno y no forma parte de la API pública. Por lo tanto, no se podrá ver a través @hide
. Para obtener más información acerca de @hide
y cómo acceder a ella sin ver , ¿qué significa @hide en el código fuente de Android?
Tenga en cuenta que el uso de la reflexión para acceder a ella como se describe en el enlace anterior es desalentado
El método que desea usar está en el oscuro lista gris con las siguientes restricciones :
oscuro lista gris :
- Para aplicaciones cuyos SDK objetivo está por debajo de nivel API 28: cada uso de un oscuro
se permite interfaz lista gris.- aplicaciones cuyo SDK objetivo es el nivel API 28 o superior: mismo comportamiento que la lista negra
Lista negra : restringido independientemente de SDK objetivo. La plataforma se comportará como si la interfaz está ausente. Por ejemplo, se lanzará NoSuchMethodError / NoSuchFieldException cada vez que la aplicación está tratando de usarlo, y no incluirlo cuando la aplicación quiere conocer la lista de campos / métodos de una clase particular.