21

我正在尝试通过 android 设备中的蓝牙发送文件。我已经完成了发现、连接并制作了一个蓝牙套接字。问题是当我在蓝牙套接字的输出流中写入字节数组时,接收端没有收到任何东西,尽管它接受正在发送的东西。

这就是我正在做的事情(蓝牙适配器不好)

请指教。

try
    {
        BluetoothDevice dev = bad.getRemoteDevice(a);
        bad.cancelDiscovery();

        dev.createRfcommSocketToServiceRecord(new UUID(1111, 2222));
        Method m = dev.getClass().getMethod("createRfcommSocket", new Class[] {int.class});
        bs = (BluetoothSocket) m.invoke(dev, Integer.valueOf(1));
        bs.connect();
        tmpOut = bs.getOutputStream();
    }catch(Exception e)
    {

    }

    File f = new File(filename);

    byte b[] = new byte[(int) f.length()];
    try
    {
        FileInputStream fileInputStream = new FileInputStream(f);
        fileInputStream.read(b);
    }catch(IOException e)
    {
        Log.d(TAG, "Error converting file");
        Log.d(TAG, e.getMessage());
    }

    try {
        tmpOut.write(b);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
4

3 回答 3

3

我正在使用以下代码连接到远程蓝牙设备中的串行服务,它对我来说工作正常。只需确保其他设备(可以是移动设备或 PC)具有用于通过蓝牙进行串行通信的服务器套接字(请参阅下面的服务器端代码)

客户端:

UUID serialUUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
BluetoothDevice btDevice = btAdapter.getRemoteDevice(BTAddress); // Get the BTAddress after scan
BluetoothSocket btSocket = btDevice.createRfcommSocketToServiceRecord(SERIAL_UUID);
btSocket.connect();
InputStream iStream = btSocket.getInputStream();
OutputStream oStream = btSocket.getOutputStream();

服务器端:

UUID serialUUID = new UUID("1101", true);
String serviceURL = "btspp://localhost:" + serialUUID
        + ";name=Android BT Server;authorize=false;authenticate=false";
StreamConnectionNotifier connectionNotifier = (StreamConnectionNotifier) Connector
                        .open(serviceURL);
// Blocking method will wait for client to connect
StreamConnection connection = connectionNotifier.acceptAndOpen();

RemoteDevice remoteDevice = RemoteDevice.getRemoteDevice(connection);
InputStream btInput = connection.openInputStream();
OutputStream btOutput = connection.openOutputStream();
于 2012-11-24T17:26:44.863 回答
1

为什么不使用标准的api调用而不是通过反射调用,例如:

BluetoothSocket socket =  destination
                              .createRfcommSocketToServiceRecord(new UUID(...)) ;

你的 catch 块也是空的。你确定套接字没有任何异常连接吗?如果由于某种原因连接失败,Connect 将抛出 IOException。看到这个链接

于 2012-12-13T06:27:35.987 回答
0

这可能是因为 dev 和 bs 在使用 tmpout 之前超出了范围,因为它们是在您的 try/catch 块中声明的。

于 2012-09-28T21:59:46.687 回答