Android - закрытие определенного разъема Bluetooth - PullRequest
0 голосов
/ 02 сентября 2018

Я пытаюсь использовать устройство Android для подключения к устройствам Bluetooth для получения некоторой информации. В частности, я пытаюсь подключиться к наушникам Bluetooth на этом UUID:

"0000111E-0000-1000-8000-00805F9B34FB"

Для этого я создаю сокет и подключаю его к удаленному устройству следующим образом:

public ConnectThread(BluetoothDevice device) {
    // Use a temporary object that is later assigned to mmSocket
    // because mmSocket is final.
    bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
    BluetoothSocket tmp = null;
    mmDevice = device;

    try {
        // Get a BluetoothSocket to connect with the given BluetoothDevice.
        // MY_UUID is the app's UUID string, also used in the server code.
        tmp = device.createRfcommSocketToServiceRecord(UUID_HF);

    } catch (IOException e) {
        Log.e(TAG, "Socket's create() method failed", e);
    }
    mmSocket = tmp;
}

public void run() {
    // Cancel discovery because it otherwise slows down the connection.
    bluetoothAdapter.cancelDiscovery();

    try {
        // Connect to the remote device through the socket. This call blocks
        // until it succeeds or throws an exception.

        mmSocket.connect();
    } catch (IOException connectException) {
        // Unable to connect; close the socket and return.
        try {
            mmSocket.close();
        } catch (IOException closeException) {
            Log.e(TAG, "Could not close the client socket", closeException);
        }
        return;
    }

    // The connection attempt succeeded. Perform work associated with
    // the connection in a separate thread.
    manageMyConnectedSocket(mmSocket);}

Работает нормально, когда наушники еще не подключены к моему устройству Android. Но происходит то, что наушники автоматически подключаются к моему устройству Android благодаря самой ОС. И в этом случае, когда я выполняю метод mmSocket.connect (), он не возвращается. Я подумал, что, возможно, Android автоматически подключил другой сокет с тем же UUID, и поэтому мой не работает. Как вы думаете, это проблема? И если это так, есть ли способ закрыть все сокеты между моим устройством Android и удаленным устройством Bluetooth? Или, может быть, тот, который мешает моему процессу? Заранее спасибо.

1 Ответ

0 голосов
/ 02 сентября 2018

что на самом деле происходит, так это то, что ОС выполняет критерии сопряженного устройства, чтобы сэкономить заряд батареи, поскольку процесс поиска потребляет много энергии. так как вы выполнили поиск, вы должны искать поиск в сопряженных устройствах, а не в обычном поиске, и результат поиска должен быть взят из Запрос сопряженных устройств

Перед выполнением обнаружения устройства стоит запросить набор сопряженных устройств, чтобы узнать, известно ли требуемое устройство. Для этого вызовите getBondedDevices (). Это возвращает набор объектов BluetoothDevice, представляющих сопряженные устройства. Например, вы можете запросить все сопряженные устройства и получить имя и MAC-адрес каждого устройства, как показано в следующем фрагменте кода:

Set<BluetoothDevice> pairedDevices = mBluetoothAdapter.getBondedDevices();

if (pairedDevices.size() > 0) {
// There are paired devices. Get the name and address of each paired device.
for (BluetoothDevice device : pairedDevices) {
    String deviceName = device.getName();
    String deviceHardwareAddress = device.getAddress(); // MAC address
    }
}

Чтобы инициировать соединение с устройством Bluetooth, все, что требуется от связанного объекта BluetoothDevice, - это MAC-адрес, который вы получаете, вызывая getAddress (). Подробнее о создании соединения вы можете узнать в разделе «Подключение устройств».

это официальная документация от Google, охватывающая каждую деталь о Bluetooth: https://developer.android.com/guide/topics/connectivity/bluetooth

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