【问题标题】:How to make a bluetooth service publicly discoverable?如何使蓝牙服务可公开发现?
【发布时间】:2009-12-10 09:17:40
【问题描述】:

我尝试创建一个提供公开可用服务的 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。

有什么想法吗?

提前致谢。

【问题讨论】:

  • 您要创建什么类型的服务?什么在做发现?您是否编写了试图发现它的代码?

标签: java java-me bluetooth


【解决方案1】:

您是否尝试使用setDiscoverable 方法?

【讨论】:

  • Jup - 只是忘了把它放在代码示例中但它就在那里 :)
【解决方案2】:

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

您需要将服务的服务类 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 属性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-30
    • 2018-03-04
    • 2014-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多