【问题标题】:Send data from android bluetooth to PC with bluecove使用bluecove将数据从android蓝牙发送到PC
【发布时间】:2011-05-14 18:48:55
【问题描述】:

我正在尝试在 Windows 上使用 Bluecove 将数据从 android(使用其 SDK 中的 API)发送到 PC,这是服务器的最后一个。

我可以让 android 连接到服务器,但是当我写入套接字的输出流时,服务器上没有任何反应。我重写了 onPut 方法,但它从未被调用过。

代码如下,如果有人可以帮助我,我将不胜感激:

安卓

public class BluetoothWorker {

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

private static BluetoothSocket socket;


private static BluetoothSocket getBluetoothSocket(){

    BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
    mBluetoothAdapter.cancelDiscovery();
    Set<BluetoothDevice> pairedDevices = mBluetoothAdapter.getBondedDevices();
    // If there are paired devices
    if (pairedDevices.size() > 0) {
        // Loop through paired devices
        for (BluetoothDevice device : pairedDevices) {
            // Add the name and address to an array adapter to show in a ListView
            if(device.getName().equalsIgnoreCase(("MIGUEL-PC"))){
                try {
                    return device.createRfcommSocketToServiceRecord(generalUuid);
                } catch (IOException e) {
                    return null;
                }
            }
        }
    }
    return null;
}

public static boolean sendData(String status){

        socket = getBluetoothSocket();
        try {
            socket.connect();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            socket = null;
        }

    if(socket != null){
        try {       

            socket.getOutputStream().write(status.getBytes());
            socket.getOutputStream().flush();
            socket.close();
            return true;
        } catch (IOException e) {
            socket = null;
            return false;
        }
    }else{
        return false;
    }
}
}

电脑代码

public class AISHIntegrationBTBridge {

static final String serverUUID = "0000110100001000800000805F9B34FB";

public static void main(String[] args) throws IOException {

    LocalDevice.getLocalDevice().setDiscoverable(DiscoveryAgent.GIAC);

    SessionNotifier serverConnection = (SessionNotifier) Connector.open("btgoep://localhost:"
            + serverUUID + ";name=ObexExample");

    int count = 0;
    while(count < 2) {
        RequestHandler handler = new RequestHandler();
        serverConnection.acceptAndOpen(handler);

        System.out.println("Received OBEX connection " + (++count));
    }
}

private static class RequestHandler extends ServerRequestHandler {

    public int onPut(Operation op) {
        try {
            HeaderSet hs = op.getReceivedHeaders();
            String name = (String) hs.getHeader(HeaderSet.NAME);
            if (name != null) {
                System.out.println("put name:" + name);
            }

            InputStream is = op.openInputStream();

            StringBuffer buf = new StringBuffer();
            int data;
            while ((data = is.read()) != -1) {
                buf.append((char) data);
            }

            System.out.println("got:" + buf.toString());

            op.close();
            return ResponseCodes.OBEX_HTTP_OK;
        } catch (IOException e) {
            e.printStackTrace();
            return ResponseCodes.OBEX_HTTP_UNAVAILABLE;
        }
    }
}
}

【问题讨论】:

    标签: android connection bluetooth bluecove


    【解决方案1】:

    两年前我做过类似的事情。

    对于 Android,我的代码与你的略有不同:

    BluetoothSocket socket = Device.createRfcommSocketToServiceRecord(device_UUID);
    socket.connect();
    DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
    
    dos.writeChar('x'); // for example
    
    socket.close();
    

    我使用DataOutputStream 向PC 发送数据。不过这个肯定没关系,仅供大家参考。

    对于电脑,

    LocalDevice localDevice = LocalDevice.getLocalDevice();
    
    localDevice.setDiscoverable(DiscoveryAgent.GIAC); // Advertising the service
    
    String url = "btspp://localhost:" + device_UUID + ";name=BlueToothServer";
    StreamConnectionNotifier server = (StreamConnectionNotifier) Connector.open(url);
    
    StreamConnection connection = server.acceptAndOpen(); // Wait until client connects
    //=== At this point, two devices should be connected ===//
    DataInputStream dis = connection.openDataInputStream();
    
    char c;
    while (true) {
        c = dis.readChar();
        if (c == 'x')
            break;
    }
    
    connection.close();
    

    我不确定上述代码今天是否仍然有效,因为这是在 2 年前完成的。 BlueCove API 可能发生了很大变化。但无论如何,这些代码对我有用。希望这对您有所帮助。

    还有一点需要注意的是,为了使用 BlueCove,我必须在我的 PC 中卸载 Toshiba 蓝牙驱动程序并重新安装 Microsoft 驱动程序。否则,它将无法正常工作。 (不过最新版本的BlueCove可能已经支持不同的驱动了,如果说错了请指正。)

    【讨论】:

      【解决方案2】:

      在您的 Android sendData 方法中尝试使用“println”而不是“write”!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-19
        • 1970-01-01
        • 1970-01-01
        • 2018-06-16
        相关资源
        最近更新 更多