2016-04-17 21 views
0

我試圖使用altbeacon庫作爲信號傳輸Android手機,如here所述。我想設置使用下列方法的一些參數:AltBeacon setBluetoothAddress和setBluetoothName

setServiceUuid(0xfeaa) 
setBluetoothAddress("31:14:15:92:65:35") 
setBluetoothName("MyBeacon") 

當信標在RangeNotifier監聽器方法解釋其他Android設備上,didRangeBeaconsInRegion,信標沒有這些參數進行設置。 (例如,getServiceUuid是-1,BT地址和名稱均爲空)。

我用下面的燈塔布局解析器的發射應用,並在掃描應用程序:

m:2-3=beac,i:4-19,i:20-21,i:22-23,p:24-24,d:25-25 

我不知道這意味着什麼,雖然;我想知道我是否需要改變它。

任何人都有一個想法如何使藍牙地址,名稱等可以在接收設備上掃描的信標中訪問?

回答

2

Beacon類中的某些字段僅用於檢測信標並且不影響傳輸。你已經找到了三個確切的領域。下面是每個的解釋,爲什麼他們的工作是這樣的:

  • BluetoothAddress:這是內置到手機上的藍牙芯片固定字節到6字節的唯一地址。當發送數據包(信標廣告或其他)時,芯片總是使用相同的地址。你不能改變它。這只是藍牙工作的方式。

  • BluetoothName:這是您的手機對其他藍牙掃描儀可見的友好名稱。更改此名稱不僅會影響信標傳輸,還會影響手機上的所有藍牙操作。出於這個原因,圖書館的BeaconTransmitter不改變這個名字。但是,您可以通過調用Android的BluetoothAdapter類中的setName方法來完成自己的操作。請參閱here

  • ServiceUUID:該字段僅適用於某些信標格式,如Eddystone,它們基於16位GATT服務UUID。對於其他信標格式(AltBeacon,iBeacon),如您所見,此值爲-1。 ServiceUUID實際上在BeaconParser佈局表達式中定義。在Beacon類中,您可以閱讀它,但是寫入它不起作用。您通常不需要擔心該字段,當然也不需要擔心問題中顯示的AltBeacon佈局,因爲它不用於該格式。

+0

謝謝大衛。我將嘗試在設備上爲空時設置BluetoothName(如我在Beacon中看到的那樣)。我想我不需要在通過信標類型代碼或服務uuid​​進行測距時過濾設備。 – juliusspencer

+0

我只是看看我的手機上的適配器(bluetoothManager.getAdapter()),並設置了名稱(正如我期望的「Julius的Nexus 6P」),地址設置爲02:00:00:00:00 :00。我現在不確定適配器的細節設置在哪裏。 在其他設備上發現的Beacon對象顯示地址爲54:29:9A:70:6D:84,但我的手機的About => Status有一個藍牙地址,該地址開始AC:CF:85 ......。然而,接收器中的Beacon對象與手機上設置的ID相同。現在很困惑!感謝任何幫助@davidgyoung。 – juliusspencer

+0

好吧,02:00:00:00:00:00解釋爲我在M上,「Android使用Wi-Fi和藍牙API刪除程序化訪問設備的本地硬件標識符」。所以現在我只需要調和54:......和AC:......地址,並找出爲什麼我仍然得不到這個名字。 – juliusspencer