Android 安卓和蓝湾
我需要使用蓝牙编写某种客户机-服务器应用程序。我需要在我的笔记本电脑上创建一些服务器(我使用java和bluecove),它将向应用程序(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
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});