// Update is called once per frame void Update() { if (_timeout > 0f) { _timeout -= Time.deltaTime; if (_timeout <= 0f) { if (_startScan) { _startScan = false; _timeout = _startScanTimeout; // scanning for iBeacon devices requires that you know the Proximity UUID and provide an Identifier BluetoothLEHardwareInterface.ScanForBeacons(new string[] { "01020304-0506-0708-0910-111213141516:Pit01" }, (iBeaconData) => { if (!_iBeaconItems.ContainsKey(iBeaconData.UUID)) { BluetoothLEHardwareInterface.Log("item new: " + iBeaconData.UUID); var newItem = Instantiate(iBeaconItemPrefab); if (newItem != null) { BluetoothLEHardwareInterface.Log("item created: " + iBeaconData.UUID); newItem.transform.SetParent(transform); newItem.transform.localScale = new Vector3(1f, 1f, 1f); var iBeaconItem = newItem.GetComponent <iBeaconItemScript> (); if (iBeaconItem != null) { _iBeaconItems[iBeaconData.UUID] = iBeaconItem; } } } if (_iBeaconItems.ContainsKey(iBeaconData.UUID)) { var iBeaconItem = _iBeaconItems[iBeaconData.UUID]; iBeaconItem.TextUUID.text = iBeaconData.UUID; iBeaconItem.TextRSSIValue.text = iBeaconData.RSSI.ToString(); // Android returns the signal power or measured power, iOS hides this and there is no way to get it iBeaconItem.TextAndroidSignalPower.text = iBeaconData.AndroidSignalPower.ToString(); // iOS returns an enum of unknown, far, near, immediate, Android does not return this iBeaconItem.TextiOSProximity.text = iBeaconData.iOSProximity.ToString(); // we can only calculate a distance if we have the signal power which iOS does not provide if (iBeaconData.AndroidSignalPower != 0) { iBeaconItem.TextDistance.text = Distance(iBeaconData.AndroidSignalPower, iBeaconData.RSSI, 2.5f).ToString(); } } }); } else { BluetoothLEHardwareInterface.StopScan(); _startScan = true; _timeout = _startScanDelay; } } } }