Android BluetoothGatt超级方法?

时间:2016-04-21 11:58:35

标签: android android-bluetooth

扩展BluetoothGattCallback时,实现者应该调用超级方法吗?

示例:

public void onCharacteristicWrite(BluetoothGatt gatt,
                                  BluetoothGattCharacteristic characteristic, 
                                  int status) {
     // Is this needed?
     super.onCharacteristicWrite(gatt, characteristic, status);

     ...
}

2 个答案:

答案 0 :(得分:2)

在这种情况下,似乎没有必要调用超级方法。 BluetoothGattCallback类是抽象的,它的所有方法都是空的。

修改

BluetoothGattCallback是Android SDK的一部分,位于原生图层之上。 它的方法是从BluetoothGatt类调用的,它处理来自本机层的回调并将它们转换为对BluetoothGattCallback方法的调用。

如果你想知道为什么BluetoothGattCallback是一个具有空实现而不是接口的抽象类。可能是因为它有太多的回调方法,所以实现一个接口会导致代码中不必要的膨胀。

<强> EDIT2:

这方面的官方参考有点难以获得。硬件制造商Compatiblity definition声明他们必须以Android SDK中声明的形式实现Android API。

请注意,底层原生图层是通过Android的Binder机制连接的。

答案 1 :(得分:0)

在观看BluetoothGattCallBack的源代码后,似乎无需调用super方法。

对于BluetoothGattCallBack是一个抽象类,onCharacteristicWrite也是一个空方法。

以下是它的源代码:

/**
 * Callback indicating the result of a characteristic write operation.
 *
 * <p>If this callback is invoked while a reliable write transaction is
 * in progress, the value of the characteristic represents the value
 * reported by the remote device. An application should compare this
 * value to the desired value to be written. If the values don't match,
 * the application must abort the reliable write transaction.
 *
 * @param gatt GATT client invoked {@link BluetoothGatt#writeCharacteristic}
 * @param characteristic Characteristic that was written to the associated
 *                       remote device.
 * @param status The result of the write operation
 *               {@link BluetoothGatt#GATT_SUCCESS} if the operation succeeds.
 */
public void onCharacteristicWrite(BluetoothGatt gatt,
                                  BluetoothGattCharacteristic characteristic, int status) {
}