3

我正在通过应用程序将客户端蓝牙设备与我的手机配对。现在我在 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 示例,其中我有一个连接线程和一个接受线程,或者 asynctasks 是否足够。

这是我正在使用的 UUID 字符串 00001101-0000-1000-8000-00805F9B34FB 我操作的顺序是我在服务器端监听,一旦我尝试打开蓝牙设备的套接字,我尝试连接但是最终得到一个 Permission Denied IO 异常

4

2 回答 2

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 开发者文档的蓝牙适配器。

于 2014-03-08T07:04:59.250 回答
0

您需要在您的清单中请求蓝牙权限和 BLUETOOTH_ADMIN 权限,如 Android API此处所述

“注意:大多数方法需要 BLUETOOTH 权限,有些还需要 BLUETOOTH_ADMIN 权限。”

于 2012-10-24T22:21:53.150 回答