如何使蓝牙服务公开发现?

时间:2009-12-10 09:17:41

标签: java java-me bluetooth

我尝试创建一个提供公开可用服务的MIDlet,但下面的代码还不够。该服务已启用(无例外),但仍无法发现。

public StreamConnection waitForConnection() throws IOException {

    if (this.notifier == null) {
        // Create a server connection (a notifier)
        this.notifier = (StreamConnectionNotifier) Connector.open(serviceURL);
    }
    return this.notifier.acceptAndOpen();
}

url构造如下

private final static String serviceURL = "btspp://localhost:" + servieceUUID +
        ";name=" + serviceName + ";authenticate=false;master=false;encrypt=false";

经过一些谷歌搜索后,我发现像这样的代码会有所帮助:

        final ServiceRecord sr = LocalDevice.getLocalDevice().getRecord(this.notifier);
        //Public browse group UUID
        final DataElement element = new DataElement(DataElement.DATSEQ);
        element.addElement(new DataElement(DataElement.UUID, new UUID(0x1002)));
        sr.setAttributeValue(0x0005, element);
        LocalDevice.getLocalDevice().updateRecord(sr);

但首先它没有解决问题,其次我不知道它究竟是做什么的。

我使用诺基亚E70。

有什么想法吗?

提前致谢。

2 个答案:

答案 0 :(得分:0)

您是否尝试使用setDiscoverable方法?

答案 1 :(得分:0)

我知道这个问题真的很老了,但我刚碰到它,经过一天的撞击我的头后,我找到了解决方案。

您需要将服务的服务类ID设置为已知的内容:

ServiceRecord sr = LocalDevice.getLocalDevice().getRecord(service);
DataElement de = new DataElement(DataElement.DATSEQ);
DataElement uuid = new DataElement(DataElement.UUID, new UUID("1101",false));
de.addElement(uuid);
sr.setAttributeValue(0x0001, de);
LocalDevice.getLocalDevice().updateRecord(sr);

UUID 0x1101是一个串行设备(我随意选择了它),属性0x0001是服务类ID属性。