BluetoothAdapter.getBondedDevices возвращает ноль устройств хотя и в паре, почему? - PullRequest
0 голосов
/ 30 апреля 2019

В настоящее время я пытаюсь написать приложение для Android, которое подключается к устройству через Bluetooth и открывает последовательное соединение.Чтобы подключиться к устройству, мне нужно передать устройство некоторому коду, который устанавливает и поддерживает соединение.Моя проблема в том, что я, похоже, не дошел до этой точки, потому что мой код всегда возвращает NullPointer как устройство.

Я уже пытался отладить код и теперь обнаружил, что функция для получения связанных устройств возвращаетноль устройств.Чтобы смягчить это, я удостоверился, что адаптер Bluetooth существует и включен.Я также убедился в меню Android, что подключены устройства и что устройство Android, с которым я хочу установить соединение, было сопряжено.

Ниже приведен код, который должен идентифицировать и вернуть устройство:

public class BluetoothDeviceRecognition {
BluetoothDevice blDevice(BluetoothAdapter myBluetoothAdapter) {


    Set<BluetoothDevice> pairedDevices = myBluetoothAdapter.getBondedDevices();
    BluetoothDevice myDevice = null;
    if(pairedDevices.size() > 0){
        for (BluetoothDevice device : pairedDevices){
            if (device.getName().equals("ESP32_LED_Control")) {
                myDevice = device;

            }
        }
    }
    return myDevice;
}

Это код, который должен убедиться, что есть адаптер Bluetooth, и который должен включить его, если это не так:

    public void startBluetooth(){
    if(mBluetoothAdapter == null)
    {
        Log.d(TAG, "connectBluetooth: Does not have Bluetooth Capabilities");
        return;
    }
    if(!mBluetoothAdapter.isEnabled())
    {
        Log.d(TAG, "connectBluetooth: Enabling Bluetooth");
        Intent enableBTIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
        startActivity(enableBTIntent);
    }
}

И это код, которыйзапускает приведенный выше код:

        connect.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {

            try{
                startBluetooth();
                BluetoothDevice myDevice = mBluetoothDevice.blDevice(mBluetoothAdapter);

                connectBluetooth(myDevice, MY_UUID_INSECURE);
            }
            catch(NullPointerException e){
                Log.d(TAG, "connectBluetooth: Bluetooth Device cannot be Null");
                sent.setText("Error, Bluetooth Device cannot be Null");
            }


        }
    });

При установке точки останова в начале цикла if в первом фрагменте кода я ожидаю, что размер pairedDevices будет больше 0, но фактический размерpairedDevices равен нулю.

РЕДАКТИРОВАТЬ:

Мой файл манифеста:

<?xml version="1.0" encoding="utf-8"?>

<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

My Target SDKдолжно быть 21.

РЕДАКТИРОВАТЬ: Таким образом, я на самом деле не решил, но вместо этого использовал другой подход.Вместо того, чтобы искать устройства, которые были в паре с моим устройством, я вместо этого ищу устройства, которые в настоящее время обнаруживаются рядом со мной.Использовал этот код: https://github.com/mitchtabian/Sending-and-Receiving-Data-with-Bluetooth

Ответы [ 2 ]

0 голосов
/ 01 мая 2019

Вы пропустили разрешение на местоположение,

Как указано в документации: https://developer.android.com/guide/topics/connectivity/bluetooth#Permissions

Если ваш целевой Sdk 23 и выше, вы должны запросить это разрешение во время выполнения

0 голосов
/ 30 апреля 2019

Перед вызовом mBluetoothDevice.blDevice (mBluetoothAdapter) вы должны убедиться, что Bluetooth включен.Так что вам просто нужно использовать startActivityForResult (enableBTIntent) для включения bluetooth и получения результата от onActivityResult (), как только вы получите результат, когда пользователь включает bluetooth, вы можете вызвать mBluetoothDevice.blDevice (mBluetoothAdapter).

...