我正致力于通过应用程序将客户端蓝牙设备与我的手机配对。现在我在asynctask中使用以下代码来尝试为远程设备创建一个套接字。
try{
ba.cancelDiscovery();
socket= blud.createRfcommSocketToServiceRecord(uuid);
Method m = blud.getClass().getMethod("createRfcommSocket", new
Class[] {int.class});
socket = (BluetoothSocket) m.invoke(blud, 1);
}catch(Exception e){e.printStackTrace();}
我不知道我是否需要更多地遵循BluetoothChat示例,其中我有一个Connect Thread和一个Accept Thread,或者asynctasks就足够了。
这是我正在使用的UUID字符串00001101-0000-1000-8000-00805F9B34FB 我正在操作的顺序是我在服务器端监听,一旦我试图打开蓝牙设备的套接字我尝试连接但最终获得权限拒绝IO异常
答案 0 :(得分:0)
您需要在清单中申请蓝牙权限和BLUETOOTH_ADMIN权限 正如Android API here
所述“注意:大多数方法都需要BLUETOOTH权限,有些方法还需要BLUETOOTH_ADMIN权限。”
答案 1 :(得分:0)
对于蓝牙权限,请在android清单文件中添加以下内容 -
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.BLUETOOTH" />
要创建债券,请使用此 -
public boolean createBond(BluetoothDevice btDevice)
throws Exception
{
Class class1 = Class.forName("android.bluetooth.BluetoothDevice");
Method createBondMethod = class1.getMethod("createBond");
Boolean returnValue = (Boolean) createBondMethod.invoke(btDevice);
return returnValue.booleanValue();
}
创建套接字 -
private BluetoothSocket createBluetoothSocket(BluetoothDevice device) throws IOException {
if(Build.VERSION.SDK_INT >= 10){
try {
final Method m = device.getClass().getMethod("createInsecureRfcommSocketToServiceRecord", new Class[] { UUID.class });
return (BluetoothSocket) m.invoke(device, my_UUID);
} catch (Exception e) {
Log.e("No Connection Created", "Could not create Insecure RFComm Connection",e);
}
}
return device.createRfcommSocketToServiceRecord(my_UUID);
}
同时从android开发者文档中检查Bluetooth Adapter。