簡體   English   中英

Android低功耗藍牙-iBeacon

[英]Android Bluetooth Low Energy - iBeacon

最近,我有一個iBeacon設備,旨在創建無法識別和使用它的Android應用。 我是Android應用程序中使用藍牙的新手,有很多事情我仍然不知道。 在Internet和這個論壇上,我發現了使用Radius Networks的Android IBeacon庫的建議,但是,現在,它不再可用:

https://github.com/RadiusNetworks/android-ibeacon-service

因此,我首先使用了Android開發者指南中有關低功耗藍牙的代碼: https : //developer.android.com/guide/topics/connectivity/bluetooth-le.html

使用此代碼,我什至可以檢測到設備,甚至可以連接到該設備,但是我不知道如何獲取Proximity Uuid以及Major和Minor值:該應用程序從設備的服務和特性中顯示了很多Uuid,但沒有一個是設備的接近Uuid。

任何人都可以告訴我如何使用Android Bluetooth LE API來獲取數據,或者幫助我獲取Radius Networks的Eclipse Android iBeacon庫以及使用它的指南或顯示如何使用它的示例?

謝謝。

編輯/更新:
它會變得更好.. AltBeacon
檢查AltBeacon規格

AltBeacon為信標傳輸內容以及Android,Windows和其他設備如何使用該數據帶來更大的透明度。


為什么RadiusNetworks的Android iBeacon庫不再可用:

供應商已開始遵守Apple制定的准則,結果被迫“擦洗”其產品中的Android設備之間的任何引用或連接及其對iBeacon協議的檢測。

閱讀更多: Apple嚴厲打擊Android版iBeacon
我認為最好的選擇似乎是一直在使用它,已經擁有它並可以與您共享的人,因為從先前的提交中,您可能不會獲得每個組件-庫,示例,服務

另外: Android iBeacon Lib首席執行官RadiusNetworks的說明

現在,來接近UUID主要未成年人
我還沒有找到直接獲取參數的方法,盡管您可以使用iBeacon Technology來查看 android中的信標的主要,次要,uuidSensorTag的 uuid 在后者中,有跡象表明iBeacon Service之后存在主要的,次要的uuid,但是TI儀器可能會受到限制。

在android中,作為標識符..您可以通過信標的device.getAddress()為每個BluetoothDevice device;恢復device address BluetoothDevice device;

以下兩個是完全不同的東西,盡管兩者都稱為UUID。

  • BLE外圍設備上托管的GATT服務的UUID。
  • iBeacon的接近UUID。

您應該了解“ GATT服務的UUID”:

  1. BLE外圍設備可以實現GATT服務器。
  2. GATT服務器托管GATT服務。
  3. API“ android.bluetooth.BluetoothGatt.getServices()”返回的是GATT服務列表(List <BluetoothGattService>)。
  4. BluetoothGattService.getUuid()返回服務的ID。

您應該了解“ iBeacon的鄰近UUID”:

  1. BLE外圍設備廣播廣告數據包。
  2. 廣告包的有效負載部分包含AD結構的列表。
  3. 一個AD結構由(1)長度(1個字節),(2)AD類型(1個字節)和(3)AD數據組成。 在“藍牙核心規范4.2”的“ 11廣告和掃描響應數據格式”中描述了AD結構格式。
  4. iBeacon是一種AD結構。
  5. iBeacon的AD類型為0xFF(表示制造商特定數據)。
  6. iBeacon的AD數據的前4個字節為0x4C,0x00、0x02和0x15。 前2個字節(0x4C,0x00)表示“ Apple,Inc.” 接下來的2個字節(0x02、0x15)表示“ iBeacon格式”。
  7. 接近UUID(16個字節),主要數字(大字節序為2個字節),次要數字(大字節序為2個字節)和冪(1個字節)緊隨前4個字節。

因此,獲取iBeacon信息(鄰近UUID,主要,次要,電源)的操作如下。

  1. 將廣告包的有效負載解析為AD結構的列表。
  2. 對於每個AD結構,請檢查AD Type是否為0xFF,並且AD Data的前4個字節為0x4C,0x00、0x02和0x15。
  3. 當滿足條件2.時,將其余字節解析為接近UUID,主要數字,次要數字和冪。

如果使用nv-bluetooth ,則可以從廣告包中提取iBeacon,如下所示:

public void onLeScan(BluetoothDevice device, int rssi, byte[] scanRecord)
{
    // Parse the payload of the advertising packet.
    List<ADStructure> structures =
        ADPayloadParser.getInstance().parse(scanRecord);

    // For each AD structure contained in the advertising packet.
    for (ADStructure structure : structures)
    {
        if (structure instanceof IBeacon)
        {
            // iBeacon was found.
            IBeacon iBeacon = (IBeacon)structure;

            // Proximity UUID, major number, minor number and power.
            UUID uuid = iBeacon.getUUID();
            int major = iBeacon.getMajor();
            int minor = iBeacon.getMinor();
            int power = iBeacon.getPower();

            ........

有關詳細信息,請參見“ iBeacon作為一種AD結構 ”。

RadiusNetworks已結合新的跨平台信標鄰近性規范“重新發布”了這些庫和示例。

新的AltBeacon標准允許跨平台的應用程序

查看altbeacon.org

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM