代码之家  ›  专栏  ›  技术社区  ›  Łukasz Bownik

如何公开蓝牙服务?

  •  1
  • Łukasz Bownik  · 技术社区  · 15 年前

    我试图创建一个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 回复  |  直到 9 年前
        1
  •  0
  •   Wonil    15 年前

    你试过用 setDiscoverable 方法?

        2
  •  0
  •   Eric Lange    12 年前

    我知道这个问题真的很老了,但我刚碰到它,在一天的颠簸之后,我找到了解决办法。

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