首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >android和bluecove

android和bluecove
EN

Stack Overflow用户
提问于 2011-11-25 20:44:44
回答 1查看 2.9K关注 0票数 0

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

服务器:

代码语言:javascript
复制
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;
        }
    }
}
}

应用程序:

代码语言:javascript
复制
public class BTTestActivity extends Activity {

String dStarted = BluetoothAdapter.ACTION_DISCOVERY_STARTED;
String dFinished = BluetoothAdapter.ACTION_DISCOVERY_FINISHED;
BluetoothAdapter bluetooth = BluetoothAdapter.getDefaultAdapter();
static final String serverUUID = "11111111111111111111111111111123";

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);   

    BroadcastReceiver discoveryResult = new BroadcastReceiver() 
    {
        public void onReceive(Context context, Intent intent) 
        {
            String remoteDeviceName = intent.getStringExtra(BluetoothDevice.EXTRA_NAME);
            BluetoothDevice remoteDevice;

            remoteDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);

            Log.i("@#$%^&*(*&^%$#@#$%^&*(", "WYSWIETLAM");
            Toast.makeText(getApplicationContext(), "Discovered: " + remoteDeviceName + " address " + remoteDevice.getAddress(), Toast.LENGTH_SHORT).show();

            try{
                BluetoothDevice device = bluetooth.getRemoteDevice(remoteDevice.getAddress());
                BluetoothSocket clientSocket = device.createRfcommSocketToServiceRecord(UUID.fromString(serverUUID));
                clientSocket.connect();

            } catch (IOException e) {
                Log.d("BLUETOOTH", e.getMessage());
            }
        }
    };

    registerReceiver(discoveryResult, new IntentFilter(BluetoothDevice.ACTION_FOUND));
}

public void fun(View view)
{   
    bluetooth.enable();

    if (!bluetooth.isDiscovering())
        bluetooth.startDiscovery();
}

}

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

代码语言:javascript
复制
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

有人知道这段代码出了什么问题吗?谢谢你的帮助。

编辑:

我将运行这个示例,就像您向我展示的那样,我运行它,但它不工作:(我的服务器有问题。他在start方法中的"StreamConnection streamConnection = connectionNotifier.acceptAndOpen();“行上停止。和hare是你的android应用程序中的日志:

代码语言:javascript
复制
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!

当我点击按钮时,我会进入日志

代码语言:javascript
复制
11-26 16:19:02.389: D/MyActivity(3166): In listener button.

在您的应用程序代码中,我将蓝牙地址更改为笔记本电脑上的蓝牙设备。你知道哪里出了问题吗,也许我需要对你的代码做些别的事情?我有个问题。在你的应用程序代码中,你在哪里设置了服务器的UUID?

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

顺便说一句。我使用BlueSoleil 6.4.149.0作为我的蓝牙堆栈,因为我的"Toshiba for windows“堆栈不能与bluecove一起工作。也许这里有问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-11-25 20:59:52

看看我的答案:Why am I losing bluetooth client/server connection?

您应该在调用createRfcommSocket时尝试使用反射:

代码语言:javascript
复制
Method m = bt.getClass().getMethod("createRfcommSocket", new Class[] {int.class});

我已经做了一个服务器/客户端的蓝牙连接,它对我来说是有效的。我也遇到过类似的问题,在使用反射时也没问题。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8269329

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档