在Android上使用蓝牙的服务发现失败异常

我目前正在开发一个通过蓝牙连接到乐器的Android应用程序,需要编写字符串命令并接收字符串响应。目前,我可以通过Wi-Fi为TCP / IP进行连接/读取/写入,现在尝试实现蓝牙。但是我遇到了一些障碍。我一直在网上搜索,试图找到类似的例子,但没有任何运气。我一直在使用Android开发人员资源示例:Bluetooth Chat作为主要参考点。

我当前的代码似乎可以正常工作。然后在连接点引发服务发现失败异常。我正在使用DeviceListActivity该类来发现和选择要连接的设备。它返回anActivityResult,然后我的Bluetooth类等待它处理它,然后进行连接。下面的代码几乎与蓝牙聊天应用程序相同。

public void onActivityResult(int requestCode, int resultCode, Intent data) {

if(!m_BluetoothAdapter.isEnabled())

{

m_BluetoothAdapter.enable();

}

switch (requestCode) {

case REQUEST_CONNECT_DEVICE:

// When DeviceListActivity returns with a device to connect

if (resultCode == Activity.RESULT_OK) {

// Get the device MAC address

String address = data.getExtras()

.getString(DeviceListActivity.EXTRA_DEVICE_ADDRESS);

// Get the BLuetoothDevice object

BluetoothDevice device = m_BluetoothAdapter.getRemoteDevice(address);

// Attempt to connect to the device

connect(device);

}

break;

case REQUEST_ENABLE_BT:

// When the request to enable Bluetooth returns

if (resultCode == Activity.RESULT_OK) {

// Bluetooth is now enabled, so set up a chat session

}

else {

// User did not enable Bluetooth or an error occured

Toast.makeText(this, "Bluetooth not enabled", Toast.LENGTH_SHORT).show();

finish();

}

}

}

这是我的连接功能:

private static final UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");

private void connect(BluetoothDevice device) {

m_Device = device;

BluetoothSocket tmp = null;

// Get a BluetoothSocket for a connection with the

// given BluetoothDevice

try {

tmp = device.createRfcommSocketToServiceRecord(MY_UUID);

}

catch (IOException e) {

}

m_Socket = tmp;

m_BluetoothAdapter.cancelDiscovery();

try {

// This is a blocking call and will only return on a

// successful connection or an exception

m_Socket.connect();

}

catch (IOException e) {

try {

m_Socket.close();

}

catch (IOException e2) {

}

return;

}

}

希望我做错的事情很简单,但恐怕从来没有那么容易。这是我第一次进行任何蓝牙开发,也许我做的是公然的错误……但是我不确定为什么我会发现服务发现失败异常。

你可以随时在手机上手动配对/查找设备……它确实需要密码,但是我认为这不是我遇到的问题。

回答:

我不得不替换:

tmp = device.createRfcommSocketToServiceRecord(MY_UUID);

与:

Method m = device.getClass().getMethod("createRfcommSocket", new Class[] {int.class});

tmp = (BluetoothSocket) m.invoke(device, 1);

并奏效!

以上是 在Android上使用蓝牙的服务发现失败异常 的全部内容, 来源链接: utcz.com/qa/425962.html

回到顶部