Почему подключиться к устройству Bluetooth, работающему на устройстве Marshmallow, но не на устройстве Oreo? - PullRequest
0 голосов
/ 29 января 2019

Я создаю приложение, которое связывается с определенным модулем Bluetooth Arduino HC06.

Я тестировал это приложение на своем Samsung S5 Neo с Marshmallow, и теперь, когда я в основном закончил, я хотел попробовать на своем основном телефоне Xiaomi Redmi 5 под управлением Android Oreo.Но это не работает.У меня было одно успешное подключение от моего телефона Oreo к модулю HC06, кроме того, что он не будет подключаться.

Что я уже сделал:

Я убедился, что мой телефон Oreo и модуль HC06 сопряжены.Я добавил некоторые дополнительные разрешения через среду выполнения.Пока у меня есть эти разрешения:

<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

Я не могу понять, почему это работает на моем старом телефоне, но не на новом.Я надеюсь, что кто-то может направить меня в правильном направлении, спасибо.

Это метод, который я использую, чтобы найти Bluetooth и подключиться к Bluetooth

void findBT() {
    mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
    if(mBluetoothAdapter == null) {
        Toast errore = makeText(MachineReady.this, "Error, enable bluetooth", Toast.LENGTH_LONG);
        errore.show();
    }

    if(!mBluetoothAdapter.isEnabled()) {
        Intent enableBluetooth = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
        startActivityForResult(enableBluetooth, 0);
    }

    Set<BluetoothDevice> pairedDevices = mBluetoothAdapter.getBondedDevices();
    if(pairedDevices.size() > 0) {
        for(BluetoothDevice device : pairedDevices) {
            mmDevice = device;
            break;
        }
    }
    Log.e("Bluetooth", "Bluetooth device found01");
    //Toast found = makeText(MachineReady.this, "Bluetooth device found", Toast.LENGTH_LONG);
    //found.show();
}

void openBT() throws IOException {
    UUID uuid = UUID.fromString("00001101-0000-1000-8000-00805f9b34fb"); //Standard SerialPortService ID
    mmSocket = mmDevice.createRfcommSocketToServiceRecord(uuid);
    mmSocket.connect();
    mmOutputStream = mmSocket.getOutputStream();
    mmInputStream = mmSocket.getInputStream();
    if(mmSocket.isConnected()){
        beginListenForData();
        bluConnection = true;
        //Toast opened = makeText(MachineReady.this, "Bluetooth is opened with" + mmDevice + mmSocket, Toast.LENGTH_LONG);
        //opened.show();
        Log.e("Bluetooth", "Bluetooth connection has been established4");

        try {
            msg = "1";
            mmOutputStream.write(msg.getBytes());
            //Toast b = Toast.makeText(this, msg, Toast.LENGTH_LONG);
            //b.show();
        } catch (IOException e) {
            Log.e("Send bluetooth", "Couldn't send text");
        }

    }else if(!mmSocket.isConnected()){
        Toast notOpened = makeText(MachineReady.this, "Bluetooth couldn't connect to the device", Toast.LENGTH_LONG);
        notOpened.show();
    }

В журнале я получаю сообщение об исключенииэто: «Не удалось найти или подключиться к Bluetooth», который идет от этого

try {
            findBT();
            openBT();
        } catch (IOException e) {
            Log.e("Bluetooth", "Couldn't find or connect to bluetooth");
        }

1 Ответ

0 голосов
/ 31 января 2019

Я нашел решение.

Как сказал ecle, мой метод поиска или поиска устройства Bluetooth не работал должным образом.

Я использую этот вместо:

Set<BluetoothDevice> pairedDevices = mBluetoothAdapter
            .getBondedDevices();
    if (pairedDevices.isEmpty()) {
        Log.e("bluetooth",
                "No devices paired...");
        return ;
    }

    String MY_MAC_ADDR = getResources().getString(R.string.Bluetooth_MAC);

    for (BluetoothDevice device : pairedDevices) {
        Log.d("Bluetooth", "Device : address : " + device.getAddress() + " name :"
                + device.getName());
        if (MY_MAC_ADDR.equals(device.getAddress())) {
            mmDevice = device;
            break;
        }
    }

Я сейчасищу конкретное блютус устройство с помощью MAC-адреса

и теперь оно работает отлично.Спасибо, дядя, за то, что указал на это.

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