Android调用createRfcommSocketToServiceRecord

时间:2016-02-24 11:48:45

标签: android bluetooth android-bluetooth

我正在开发一款控制自定义设备的应用。此自定义设备具有双模蓝牙功能,可在双模式功能下接受Android和iOS连接。

使用Android我需要使用经典连接。我用几款智能手机和平板电脑做了一些测试。但是,对于某些平板电脑型号,我有连接问题。

我有来自MediaTek的MT6572 SOC的平板电脑,它有4.4.2安卓。我还有来自展讯的SC8830 SOC的SAMSUNG Galaxy Tab E,它有4.4.4 android。两种平板电脑都具有API级别19。

我以这种方式获得适配器:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
       if (mBluetoothManager == null) {
            mBluetoothManager = (BluetoothManager) context.getSystemService(Context.BLUETOOTH_SERVICE);
            if (mBluetoothManager == null) {
                return false;
            }
        }
        mBluetoothAdapter = mBluetoothManager.getAdapter();
    }

以这种方式连接我的代码:

BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(address);

BluetoothSocket socket = device.createRfcommSocketToServiceRecord(myUUID); 
socket.connect()

套接字已成功创建,但是当我尝试连接时,收到以下错误/消息:

  

java.io.IOException:读取失败,socket可能关闭或超时,读取ret:-1

当我从具有双模蓝牙的自定义设备观察日志时,我看到来自低能量连接的事件。似乎Android不尊重我创建套接字和经典蓝牙连接的尝试。

行为正常吗?可以是android中的错误吗?

由于

1 个答案:

答案 0 :(得分:0)

  1. 使用mBluetoothAdapter.startDiscovery()javadoc

  2. 检查设备是否可被发现
  3. 检查您是否将自定义设备与Android设备配对。您也可以手动执行此操作。 How to pair bluetooth devices programmatically?

  4. 通过createRfcommSocketToServiceRecord

  5. 进行连接

    在许多情况下,这种方法适用于我。