Почему Android BluetoothDevice.conenctGatt требует контекст, если он не использует его - PullRequest
0 голосов
/ 18 июня 2019

Я занимаюсь разработкой приложения для Android для полноценного общения.

Мой вопрос, почему функция

public BluetoothGatt connectGatt(Context context, boolean autoConnect,BluetoothGattCallback callback, int transport)

требует Context в качестве параметра, я выкопал функции и обнаружил, что он нигде не используется, как вы можете видеть здесь:

public BluetoothGatt connectGatt(Context context, boolean autoConnect,
                                     BluetoothGattCallback callback, int transport,
                                     boolean opportunistic, int phy, Handler handler) {
        if (callback == null)
            throw new NullPointerException("callback is null");

        // TODO(Bluetooth) check whether platform support BLE
        //     Do the check here or in GattServer?
        BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
        IBluetoothManager managerService = adapter.getBluetoothManager();
        try {
            IBluetoothGatt iGatt = managerService.getBluetoothGatt();
            if (iGatt == null) {
                // BLE is not supported
                return null;
            }
            BluetoothGatt gatt = new BluetoothGatt(iGatt, this, transport, opportunistic, phy);
            gatt.connect(autoConnect, callback, handler);
            return gatt;
        } catch (RemoteException e) {Log.e(TAG, "", e);}
        return null;
    }

Странно то, что это свойство не помечено как устаревшее. Я попытался передать нуль вместо контекста и кажется, что он работает нормально () с контекстом или без.

Кто-нибудь знает, почему это там?

1 Ответ

0 голосов
/ 18 июня 2019

ОК, судя по короткому просмотру репозитория исходного кода Android, это, похоже, пережиток старого дизайна. Функция connectGatt создает объект BluetoothGatt, для конструктора которого ранее требовался аргумент Context. (Это было в API 18 .) BluetoothGatt изначально нуждался в объекте Context для чего-то , но код был удален до того, как класс * стал общедоступным шесть лет назад. Однако аргумент Context в конструкторе остался. Около трех лет назад он был окончательно удален , но к тому времени API connectGatt был общедоступным в течение многих лет, и они не могли удалить бесполезный сейчас аргумент, не сломав большую часть существующего кода. Так они и не сделали.

Думайте об этом как о человеческом аппендиксе или копчике - рудиментарном остатке, оставленном эволюцией: -)

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