Partilhar via


Cenário GATT: recuperar dados LE Bluetooth (HTML)

[ Este artigo destina-se aos desenvolvedores do Windows 8.x e do Windows Phone 8.x que escrevem aplicativos do Windows Runtime. Se você estiver desenvolvendo para o Windows 10, consulte documentação mais recente]

Um aplicativo da Windows Store consome dados de um dispositivo LE Bluetooth enquanto é executado em primeiro plano.

Nesse exemplo, o aplicativo da Windows Store usa medições de temperatura de um dispositivo LE Bluetooth que implementa o Serviço de Termômetro de Integridade do LE Bluetooth. Na rotina de inicialização do aplicativo, o aplicativo especifica que deseja ser notificado quando uma nova medição de temperatura estiver disponível. Ao registrar um manipulador de eventos para o evento "Valor característico do termômetro alterado", o aplicativo receberá notificações de evento de valor característico alterado enquanto estiver sendo executado em primeiro plano.

Observe que, quando o aplicativo está suspenso, ele deve liberar todos os recursos do dispositivo e, quando retomar, deve executar enumeração do dispositivo e inicialização novamente.

function convertTemperature(temperatureData)
{
    // Read temperature data in IEEE 11703 floating point format
    // temperatureData[0] contains flags about optional data - not used
    var mantissa = ((temperatureData[3] << 16) |
        (temperatureData[2] << 8) |
        (temperatureData[1] << 0));

    var exponent = temperatureData[4];

    return mantissa * Math.pow(10.0, exponent);
}

function initialize() {
    var Gatt = Windows.Devices.Bluetooth.GenericAttributeProfile;
        
    Windows.Devices.Enumeration.DeviceInformation.findAllAsync(
        Gatt.GattDeviceService.getDeviceSelectorFromUuid(
        Gatt.GattServiceUuids.healthThermometer),
        null).done(function (devices) {
            Gatt.GattDeviceService.fromIdAsync(devices[0].id)
            .done(function (firstThermometerService) {
                var thermometerCharacteristic = firstThermometerService
                    .getCharacteristics(
                            Gatt.GattCharacteristicUuids
                                .temperatureMeasurement)[0];

                thermometerCharacteristic.onvaluechanged =
                    function (args) {
                        var temperatureData = Uint8Array(
                            args.characteristicValue.length);

                        Windows.Storage.Streams.DataReader.fromBuffer(
                            args.characteristicValue)
                                .readBytes(temperatureData);

                        // Interpret the temperature value
                        var temperature = 
                            convertTemperature(temperatureData);

                        document.getElementById("outputDiv").innerText =
                            temperature.toString();
                    };

                thermometerCharacteristic
                    .writeClientCharacteristicConfigurationDescriptorAsync(
                    Gatt
                      .GattClientCharacteristicConfigurationDescriptorValue
                        .notify);
            });
        });
}