2009-12-10 47 views
1

我嘗試創建一個提供公共可用服務的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"; 

經過一番google搜索,我發現,像這樣HOULD幫助代碼:

 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。

任何想法?

在此先感謝。

+0

你想創建什麼類型的服務?什麼在做發現?你有沒有編寫試圖發現它的代碼? – funkybro 2009-12-10 10:01:51

回答

0

您是否嘗試過使用setDiscoverable方法?

+0

朱 - 只是忘了把它放在一個代碼示例埠它在那裏:) – 2010-01-04 13:46:10

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屬性。