Bluetooth Scanrecord одинаковые значения равны нулю - PullRequest
0 голосов
/ 21 апреля 2020

Я попытался прочитать результат сканирования маяка, некоторые значения пришли, но result.getScanRecord().getServiceUuids() всегда равно нулю.

А также я не понимаю, как я могу разобрать "result.getScanRecord().getBytes()". Я видел много примеров, но это не понятно или так сложно. мне нужны второстепенные, мажорные и uuid значения.

Я использую minSdkVersion 21.

1 Ответ

0 голосов
/ 26 апреля 2020

Наконец-то я нашел что-то, может быть, вам тоже нужно;

во-первых, вам нужно проанализировать данные;

private String[] myFormula(byte[] data) {
    String[] newData = new String[data.length];

    for (int i = 0; i < data.length; i++) {
        if (data[i] > 0) {
            if (Integer.parseInt(data[i] + "", 16) < 9) {
                newData[i] = "0" + Integer.toHexString(data[i]);
            } else {
                newData[i] = Integer.toHexString(data[i]);
            }
        } else {
            newData[i] = Integer.toHexString(data[i] + 256);
        }
    }

    return newData;
}

после получения других данных;

public int getTxPower() {
    Number xx = hexToDec(scanRecord[26]);

    return xx.intValue();
    //return Integer.parseInt(scanRecord[26], 16);
}

public int getMinor() {
    String s = "";
    if (!scanRecord[24].equals("100")) {
        s += scanRecord[24];
    }

    s += scanRecord[25];

    try {
        return Integer.parseInt(s, 16);
    } catch (NumberFormatException e) {
        e.printStackTrace();
        return -1;
    }
}

public int getMajor() {
    String s = "";
    if (!scanRecord[22].equals("100")) {
        s += scanRecord[22];
    }

    s += scanRecord[23];

    try {
        return Integer.parseInt(s, 16);
    } catch (NumberFormatException e) {
        e.printStackTrace();
        return -1;
    }
}

public void get allDatas(){
    scanRecord = myFormula(result.getScanRecord().getBytes());

    MINOR = getMinor();
    MAJOR = getMajor();
    TXPOWER = getTxPower();
}
...