Android 安卓和蓝湾

Android 安卓和蓝湾,android,bluetooth,Android,Bluetooth,我需要使用蓝牙编写某种客户机-服务器应用程序。我需要在我的笔记本电脑上创建一些服务器(我使用java和bluecove),它将向应用程序(android)发送一些数据。这是我的密码: 服务器: public class OBEXPutServer { static final String serverUUID = "11111111111111111111111111111123"; public static void main(String[] args) throws IOExcep

我需要使用蓝牙编写某种客户机-服务器应用程序。我需要在我的笔记本电脑上创建一些服务器(我使用java和bluecove),它将向应用程序(android)发送一些数据。这是我的密码:

服务器:

public class OBEXPutServer {

static final String serverUUID = "11111111111111111111111111111123";

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);
            }

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

我的问题是,当我尝试从应用程序连接到服务时,我得到如下结果:

11-26 13:41:04.959: E/AndroidRuntime(8830): FATAL EXCEPTION: main
11-26 13:41:04.959: E/AndroidRuntime(8830): java.lang.RuntimeException: Error receiving broadcast Intent { act=android.bluetooth.device.action.FOUND (has extras) } in andr.andr.BTTestActivity$1@40513e00
11-26 13:41:04.959: E/AndroidRuntime(8830):     at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:722)
11-26 13:41:04.959: E/AndroidRuntime(8830):     at android.os.Handler.handleCallback(Handler.java:587)
11-26 13:41:04.959: E/AndroidRuntime(8830):     at android.os.Handler.dispatchMessage(Handler.java:92)
11-26 13:41:04.959: E/AndroidRuntime(8830):     at android.os.Looper.loop(Looper.java:130)
11-26 13:41:04.959: E/AndroidRuntime(8830):     at android.app.ActivityThread.main(ActivityThread.java:3835)
11-26 13:41:04.959: E/AndroidRuntime(8830):     at java.lang.reflect.Method.invokeNative(Native Method)
11-26 13:41:04.959: E/AndroidRuntime(8830):     at java.lang.reflect.Method.invoke(Method.java:507)
11-26 13:41:04.959: E/AndroidRuntime(8830):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:847)
11-26 13:41:04.959: E/AndroidRuntime(8830):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605)
11-26 13:41:04.959: E/AndroidRuntime(8830):     at dalvik.system.NativeStart.main(Native Method)
11-26 13:41:04.959: E/AndroidRuntime(8830): Caused by: java.lang.IllegalArgumentException: Invalid UUID: 11111111111111111111111111111133
11-26 13:41:04.959: E/AndroidRuntime(8830):     at java.util.UUID.fromString(UUID.java:226)
11-26 13:41:04.959: E/AndroidRuntime(8830):     at andr.andr.BTTestActivity$1.onReceive(BTTestActivity.java:44)
11-26 13:41:04.959: E/AndroidRuntime(8830):     at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:709)
11-26 13:41:04.959: E/AndroidRuntime(8830):     ... 9 more
有人知道这个代码有什么问题吗?谢谢你的帮助

编辑:

我将运行您向我展示的这个示例,我运行了它,但它不起作用:(我的wyth服务器有问题。他在开始方法中的“StreamConnection StreamConnection=connectionNotifier.acceptendopen();”行上停止。hare是来自android应用程序的日志:

11-26 16:08:32.569: D/MyActivity(2725): ON CREATE
11-26 16:08:32.569: D/MyActivity(2725): ON START
11-26 16:08:32.569: D/MyActivity(2725): INSIDE WHILE STATE ON
11-26 16:08:32.589: D/MyActivity(2725): Start discovery = true
11-26 16:08:32.589: D/MyActivity(2725): INSIDE WHILE IS DISCOVERING
11-26 16:08:32.589: D/MyActivity(2725): INSIDE WHILE IS DISCOVERING
11-26 16:08:32.589: D/MyActivity(2725): INSIDE WHILE IS DISCOVERING
11-26 16:08:32.589: D/MyActivity(2725): INSIDE WHILE IS DISCOVERING
11-26 16:08:32.589: D/MyActivity(2725): INSIDE WHILE IS DISCOVERING
11-26 16:08:32.589: D/MyActivity(2725): INSIDE WHILE IS DISCOVERING
11-26 16:08:32.589: D/MyActivity(2725): INSIDE WHILE IS DISCOVERING
11-26 16:08:32.619: D/MyActivity(2725): about to connect
11-26 16:18:18.529: D/MyActivity(3166): Connected!
当我点击按钮时,我进入日志

11-26 16:19:02.389: D/MyActivity(3166): In listener button.
在你的应用程序代码中,我将蓝牙地址更改为笔记本电脑上的蓝牙设备。你知道怎么了吗,也许我需要用你的代码做些其他事情?我有一个问题。在你的应用程序代码中,你在哪里设置服务器的UUID

我注意到,即使我不运行服务器,你的应用程序的日志也是一样的。看起来应用程序只能看到我笔记本电脑上的蓝牙适配器,看不到我笔记本电脑上运行的服务器应用程序


顺便说一句,我使用BlueSoleil 6.4.149.0作为我的蓝牙协议栈,因为我的“Toshiba for windows”协议栈不能与bluecove一起使用。可能有问题吗?

试着看看我的答案:

调用
createRfcommSocket
时,应尝试使用反射:

Method m = bt.getClass().getMethod("createRfcommSocket", new Class[] {int.class});
我已经做了一个服务器/客户端蓝牙连接,它对我很有效。我有类似的问题,结果证明使用反射是可以的

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