当前位置: 首页 > 知识库问答 >
问题:

BLE制造广告数据

能文华
2023-03-14

在BLE制造商数据中,当从字节转换为字符串时,我得到如下数据:

JLG BLE

��������ÿSPH90234380,100084 ,������������������.

即使是从字节到十六进制再到十六进制到字符串的转换,也只能像这样打印。

十六进制格式:

0201608084A4C4720424C45020A0A0FFF5307043734353393600000015FF5307504839303233343338302C3130303038342C00000000000000000000。

在ios中像这样打印制造数据

1.原始数据(Ascii):

53070355 52323031 39313130 33315048 39303233 34333830 2c313030 3038342c

2、字符串值:

SUR201911031PH90234380,100084,

那么在Android中,如何像iOS一样打印原始数据和字符串值呢

我得到这样的扫描结果

ScanResult{device=D6:23:72:02:69:72,scanRecord=scanRecord[mAdvertiseFlags=6,mServiceUuids=null,MmanufacturersSpecificData={1875=[80,72,57,48,50,51,52,51,56,48,44,49,48,48,48,56,52,44]},mServiceData={},mTxPowerLevel=10,mDeviceName=JLG BLE],rssi=-59,TimeStamp=34872779608333,eventType=27,primaryPhy=1,Secondary Aryphy=0,advertisingSid=255,txPower=127,periodicAdvertisingInterval=0}

private ScanCallback mScanCallback = new ScanCallback() {

    @Override
    public void onScanResult(int callbackType, ScanResult result) {
        try {

            BluetoothDevice btDevice = result.getDevice();
            String name = btDevice.getName();
          //  Log.d("advertisedData",);
            if (name != null && name.equalsIgnoreCase(JLGConstants.BLE_NAME)) {
                JLGBluetoothManufacturerData bluetoothManufacturerData = new JLGBluetoothManufacturerData();
                bluetoothManufacturerData.setBluetoothDevice(result.getDevice());
                bluetoothManufacturerData.setRssi(result.getRssi());
                Log.e("address",""+result);


                if (bluetoothManufactureDataList.isEmpty()) {
                    String scanHex = "";

                    SparseArray<byte[]> advertisedData = result.getScanRecord().getManufacturerSpecificData();
                    ScanRecord advertisedDataBytes = result.getScanRecord();

                    Log.d("advertisedData hex format",JLGCommonFunctions.bytesToHex(advertisedDataBytes.getBytes()));

                   Log.d("advertisedData  String format",JLGCommonFunctions.bytesToString(advertisedDataBytes.getBytes()));


                } 

            }
        } catch (Exception e) {
            JLGCommonFunctions.logExceptions(e);
        }
    }
    @Override
    public void onBatchScanResults(List<ScanResult> results) {
        /*do nothing*/
    }
    @Override
    public void onScanFailed(int errorCode) {
        /*do nothing*/
    }
};

共有1个答案

申屠喜
2023-03-14

以下字节位于Android和iOS上接收的原始数据中:

39303233343338302C3130303038342C

在这一部分之前,您的JLG外设在Android和iOS之间编码不同的制造商数据。

据推测,iOS数据包括外围设备的专用BLE地址,因为使用iOS,不可能通过使用CoreBooth的广告包获得广告BLE外围设备的专用地址。

如果您的应用程序需要唯一标识未知的BLE外围设备,则该标识信息必须由外围设备提供,只要该信息适合广告包。

 类似资料:
  • 我是android新手,所以,基本上我正在开发一个应用程序,它可以从ble设备获取数据,以便对其进行进一步的操作。我到目前为止所做的:- 我扫描了设备,得到了它们的rssi和macaddress,但当我试图在回调方法中获取scanRecord时,为了访问制造商数据,我得到了如下sparseArray:- 但是我想要的是这样,

  • 我目前只有一部5.0手机可以测试这个功能(Moto E2 3G在5.0Lollipop上),但我无法在Android 5.0上发布自定义UUID。当我说自定义UUID时,我指的是蓝牙LE规范未预定义的UUID。 在我的Nexus 6 Android 5.1上,一切正常。 当查看广告包的摩托罗拉E2与自定义UUID,这里是什么我可以看到-注意没有关于服务UUID的信息: 如果我在Moto E2上公布

  • 在Lollipop版本中,扫描结果方法返回BLE的所有详细信息,如地址、名称扫描记录、rssi等。我在制造数据字段中广播了一些数据。我尝试使用getScanRecord()。getManufacturersspecificdata()以单独提取制造数据并存储在字符串中,但他们使用了稀疏数组来存储数据。是否有任何方法可以单独从该数组中提取数据。 下面是LOGCAT数据: 12-05 17:31:39

  • 我是android上BLE编程的新手。 在我第一次在android上使用BLE的应用程序中,我遇到了一个大问题。 我使用这个功能从苹果蓝牙耳机获得了一个扫描记录。 @重写公共void onScanResult(int callbackType,ScanResult结果) 我使用Apple corp, ID(0x4C)获得了制造商数据。之后,我不知道如何解码制造商数据。 我想获取蓝牙耳机的辅助信息,

  • 在文章底部加一个广告: 到后台扩展工具->网站广告->添加广告名称 为'portal_article_bottom'的广告,同时加上广告代码; 模板里代码如下: <div> {:sp_getad("portal_article_bottom")} </div>

  • 以下术语是什么意思:A2DP、LE、APTX?