Share via


Escenario de GATT: Recuperar datos de Bluetooth LE (HTML)

[ Este artículo está destinado a desarrolladores de Windows 8.x y Windows Phone 8.x que escriben aplicaciones de Windows en tiempo de ejecución. Si estás desarrollando para Windows 10, consulta la documentación más reciente

Una aplicación de la Tienda Windows consume datos de un dispositivo Bluetooth LE mientras se ejecuta en segundo plano.

En este ejemplo, la aplicación de la Tienda Windows consume medidas de temperatura de un dispositivo Bluetooth LE que implementa el servicio de termómetro médico de Bluetooth LE. En la rutina de inicialización de esta aplicación, la aplicación especifica que desea que se le notifique cuando una nueva medida de temperatura esté disponible. Mediante el registro de un controlador de eventos para el evento "Thermometer Characteristic Value Changed", la aplicación recibirá notificaciones de evento de valor de característica cambiado mientras se ejecute en segundo plano.

Observa que cuando se suspende la aplicación, debe liberar todos los recursos del dispositivo, mientras que cuando se reanuda debe realizar la inicialización y la enumeración del dispositivo de nuevo.

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);
            });
        });
}