连接到在 Marshmallow 设备上工作但在 Oreo 设备上工作的蓝牙设备,为什么?

我正在制作一个应用程序,它与特定的 Arduino HC06 蓝牙模块进行通信。


我一直在用 Marshmallow 在我的三星 S5 Neo 上测试这个应用程序,现在当我完成大部分工作时,我想在我的主要手机上试用运行 Android Oreo 的小米红米 5。但它不起作用。我的奥利奥手机成功连接到 HC06 模块,但它无法连接。


到目前为止我做了什么:


我已确保我的奥利奥手机和 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" />

我不明白为什么这适用于我拥有的旧手机,但不适用于新手机。我希望有人能指导我正确的方向,谢谢。


这是我用来查找蓝牙并连接到蓝牙的方法


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();

}


在日志中我收到一个异常说:“无法找到或连接到蓝牙”,这是来自这个


try {

            findBT();

            openBT();

        } catch (IOException e) {

            Log.e("Bluetooth", "Couldn't find or connect to bluetooth");

        }


动漫人物
浏览 67回答 1
1回答

饮歌长啸

我找到了解决方案。正如 ecle 所说,我查找或搜索蓝牙单元的方法无法正常工作。我改用这个:Set<BluetoothDevice> pairedDevices = mBluetoothAdapter&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .getBondedDevices();&nbsp; &nbsp; if (pairedDevices.isEmpty()) {&nbsp; &nbsp; &nbsp; &nbsp; Log.e("bluetooth",&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "No devices paired...");&nbsp; &nbsp; &nbsp; &nbsp; return ;&nbsp; &nbsp; }&nbsp; &nbsp; String MY_MAC_ADDR = getResources().getString(R.string.Bluetooth_MAC);&nbsp; &nbsp; for (BluetoothDevice device : pairedDevices) {&nbsp; &nbsp; &nbsp; &nbsp; Log.d("Bluetooth", "Device : address : " + device.getAddress() + " name :"&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; + device.getName());&nbsp; &nbsp; &nbsp; &nbsp; if (MY_MAC_ADDR.equals(device.getAddress())) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mmDevice = device;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }我现在正在寻找使用 MAC 地址的特定蓝牙设备现在它完美地工作了。谢谢ecle指出这一点。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java