Android BLE соединяется с MAC-адресом - PullRequest
0 голосов
/ 13 марта 2019

Я попытался соединить телефон Arduino и Android с BLE.

Но это не работает.

Я хочу, чтобы приложение подключалось к определенному устройству с определенным именем и MAC-адресом.

Я объявляю Mac-адрес

private static String Adr = "D4:36:39:6F:7F:0E";

и т. Д.

private BluetoothGattCharacteristic characteristic;
private BluetoothAdapter mBluetoothAdapter;
private int REQUEST_ENABLE_BT = 1;
private Handler mHandler;
private static final long SCAN_PERIOD = 10000;
private BluetoothLeScanner mLEScanner;
private ScanSettings settings;
private List<ScanFilter> filters;
private BluetoothGatt mGatt;
private SharedPreferences setting;

и сделал несколько уроков.

части класы

private ScanCallback mScanCallback = new ScanCallback() {
    @Override
    public void onScanResult(int callbackType, ScanResult result) {
        Log.i("callbackType", String.valueOf(callbackType));
        Log.i("result", result.toString());
        btDevice = result.getDevice();

        if (btDevice != null && btDevice.getName() != null && btDevice.getName().contains("Device"))
            connectToDevice(btDevice);
    }

    @Override
    public void onBatchScanResults(List<ScanResult> results) {
        for (ScanResult sr : results) {
            Log.i("ScanResult - Results", sr.toString());
        }
    }

    @Override
    public void onScanFailed(int errorCode) {
        Log.e("Scan Failed", "Error Code: " + errorCode);
    }
};

private BluetoothAdapter.LeScanCallback mLeScanCallback =
    new BluetoothAdapter.LeScanCallback() {
        @Override
        public void onLeScan(final BluetoothDevice device, int rssi,
                             byte[] scanRecord) {
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    Log.i("onLeScan", device.toString());
                    connectToDevice(device);
                }
            });
        }
    };

и я искал в интернете и модифицировал

public void connectToDevice(BluetoothDevice device) {
    if (mGatt == null) {
        btDevice = mBluetoothAdapter.getRemoteDevice(CantusAdr); 
        mGatt = device.connectGatt(this, false, gattCallback);
    }
}

для подключения к устройству Arduino.

и

private ScanCallback mScanCallback = new ScanCallback() {
    @Override
    public void onScanResult(int callbackType, ScanResult result) {
        Log.i("callbackType", String.valueOf(callbackType));
        Log.i("result", result.toString());
        btDevice = result.getDevice();

        if (btDevice != null && btDevice.getName() != null && btDevice.getName().contains("Device"))
            connectToDevice(btDevice);
    }

Это коды для соединения с именем «Устройство», имеющее MAC-адрес. "D4: 36: 39: 6F: 7F: 0E"

Приложение работает.

Соединяется с одним устройством, но не с «Устройством» «D4 ~~~».

Как я могу это решить?

Пожалуйста, помогите мне.

1 Ответ

1 голос
/ 13 марта 2019

Если вы уже знаете адрес устройства, к которому хотите подключиться, вам не нужно выполнять сканирование Bluetooth LE.Этого должно быть достаточно:

BluetoothDevice device = mBluetoothAdapter.getRemoteDevice("D4:36:39:6F:7F:0E");
device.connectGatt(this, false, gattCallback);
...