Bluetooth

Bu belgede, Bluetooth ve Bluetooth Düşük Enerji cihazlarıyla iletişim kurmak için Bluetooth, Bluetooth Soket ve Bluetooth Düşük Enerji API'lerinin nasıl kullanılacağı açıklanmaktadır.

Bluetooth hakkında arka plan bilgisi için resmi Bluetooth özelliklerine bakın.

Manifest gereksinimleri

Bluetooth kullanan Chrome Uygulamaları için manifeste bluetooth girişini ekleyin ve varsa uygulamak istediğiniz profillerin, protokollerin veya hizmetlerin UUID'lerini yuva ve/veya Düşük Enerji API'leriyle birlikte uygulamak isteyip istemediğinizi belirtin.

Örneğin, bir yuva uygulaması için:

"bluetooth": {
  "uuids": [ "1105", "1106" ],
  "socket": true
}

Düşük Enerji uygulaması için:

"bluetooth": {
  "uuids": [ "180D", "1809", "180F" ],
  "low_energy": true
}

Yalnızca bağdaştırıcı durumuna erişmek, yakındaki cihazları keşfetmek ve cihazlarla ilgili temel bilgileri edinmek için yalnızca girişin kendisi gerekir:

"bluetooth": {}

Bağdaştırıcı bilgileri

Bağdaştırıcı durumunu alma

Bluetooth adaptörünün durumunu öğrenmek için bluetooth.getAdapterState yöntemini kullanın:

chrome.bluetooth.getAdapterState(function(adapter) {
  console.log("Adapter " + adapter.address + ": " + adapter.name);
});

Bağdaştırıcı bildirimleri

Bağdaştırıcı durumu her değiştiğinde bluetooth.onAdapterStateChanged etkinliği gönderilir. Bu özellik, örneğin, adaptör radyosunun açık veya kapalı olduğunu belirlemek için kullanılabilir.

var powered = false;
chrome.bluetooth.getAdapterState(function(adapter) {
  powered = adapter.powered;
});

chrome.bluetooth.onAdapterStateChanged.addListener(
  function(adapter) {
    if (adapter.powered != powered) {
      powered = adapter.powered;
      if (powered) {
        console.log("Adapter radio is on");
      } else {
        console.log("Adapter radio is off");
      }
    }
  });

Cihaz bilgileri

Bilinen cihazları listeleme

Bluetooth adaptörü tarafından bilinen cihazların listesini almak için bluetooth.getDevices yöntemini kullanın:

chrome.bluetooth.getDevices(function(devices) {
  for (var i = 0; i < devices.length; i++) {
    console.log(devices[i].address);
  }
});

Eşlenen cihazlar ve yakın zamanda keşfedilen cihazlar da dahil olmak üzere tüm cihazlar iade edilir. Yeni cihazların keşfine başlamaz (bkz. Yakındaki cihazları keşfetme).

Cihaz bildirimlerini alma

Bildirim almak için bluetooth.getDevices'ı art arda çağırmak yerine bluetooth.onDeviceAdded, bluetooth.onDeviceChanged ve bluetooth.onDeviceRemoved etkinliklerini kullanabilirsiniz.

Bir cihaz bağdaştırıcı tarafından keşfedildiğinde veya bağdaştırıcıyla bağlantı kurduğunda bluetooth.onDeviceAdded etkinliği gönderilir:

chrome.bluetooth.onDeviceAdded.addListener(function(device) {
  console.log(device.address);
});

Bu etkinlik için işleyici eklenmesi, cihazların keşfine başlamaz (bkz. Yakındaki cihazları keşfetme).

Önceden keşfedilen ve eşlenen cihazlar da dahil olmak üzere cihazlardaki değişiklikler bluetooth.onDeviceChanged etkinliğiyle bildirilir:

chrome.bluetooth.onDeviceChanged.addListener(function(device) {
  console.log(device.address);
});

Son olarak, eşlenmiş bir cihaz sistemden kaldırıldığında veya keşfedilen bir cihaz yakın zamanda görülmediğinde bluetooth.onDeviceRemoved etkinliği gönderilir:

chrome.bluetooth.onDeviceRemoved.addListener(function(device) {
  console.log(device.address);
});

Yakındaki cihazlar keşfediliyor

Yakındaki cihazları keşfetmeye başlamak için bluetooth.startDiscovery yöntemini kullanın. Keşif kaynakları yoğun olabilir. Bu nedenle, işiniz bittiğinde bluetooth.stopDiscovery işlevini çağırmanız gerekir.

Uygulamanızın yakındaki cihazları keşfetmesi gerektiğinde bluetooth.startDiscovery işlevini çağırmanız gerekir. Çağrıyı, bluetooth.AdapterState öğesinin discovering özelliği üzerinde koşullu yapmayın. Yakındaki uygulamalar başka bir uygulama tarafından keşfedilse bile arama başarılı olur ve adaptörün diğer uygulama durduktan sonra keşif yapmaya devam etmesini sağlar.

Yeni keşfedilen her bir cihazla ilgili bilgiler bluetooth.onDeviceAdded etkinliği kullanılarak alınır. Yakın zamanda keşfedilmiş veya daha önce eşlenmiş ya da bağlanmış cihazlarda etkinlik gönderilmez. Bunun yerine, geçerli bilgileri edinmek için bluetooth.getDevices'ı çağırmanız ve keşif sonucunda bu bilgilerdeki değişiklikler konusunda bilgilendirilmek için bluetooth.onDeviceChanged etkinliğini kullanmanız gerekir.

Örnek:

var device_names = {};
var updateDeviceName = function(device) {
  device_names[device.address] = device.name;
};
var removeDeviceName = function(device) {
  delete device_names[device.address];
}

// Add listeners to receive newly found devices and updates
// to the previously known devices.
chrome.bluetooth.onDeviceAdded.addListener(updateDeviceName);
chrome.bluetooth.onDeviceChanged.addListener(updateDeviceName);
chrome.bluetooth.onDeviceRemoved.addListener(removeDeviceName);

// With the listeners in place, get the list of devices found in
// previous discovery sessions, or any currently active ones,
// along with paired devices.
chrome.bluetooth.getDevices(function(devices) {
  for (var i = 0; i < devices.length; i++) {
    updateDeviceName(devices[i]);
  }
});

// Now begin the discovery process.
chrome.bluetooth.startDiscovery(function() {
  // Stop discovery after 30 seconds.
  setTimeout(function() {
    chrome.bluetooth.stopDiscovery(function() {});
  }, 30000);
});

Kullanıcı Bluetooth radyoyu kapatırsa tüm keşif oturumları sonlandırılır ve radyo açıldığında otomatik olarak devam ettirilmez. Bu, uygulamanız için önemliyse bluetooth.onAdapterStateChanged etkinliğini izlemelisiniz. discovering özelliği false olarak değişirse uygulamanızın devam etmek için bluetooth.startDiscovery özelliğini tekrar çağırması gerekir. Keşiflerin yoğun olduğu kaynaklara dikkat edin.

Cihazları tanımlama

bluetooth.getDevices ve ilgili etkinlikler tarafından döndürülen cihazları tanımlamak için bir dizi farklı seçenek sunulur.

Cihaz, Bluetooth Cihaz Kimliği spesifikasyonunu destekliyorsa Cihaz nesnesine bu spesifikasyon tarafından tanımlanan alanları içeren çeşitli özellikler eklenir. Örnek:

chrome.bluetooth.getDevices(function(devices) {
  for (var i = 0; i < devices.length; i++) {
    if (devices[0].vendorIdSource != undefined) {
      console.log(devices[0].address + ' = ' +
                  devices[0].vendorIdSource + ':' +
                  devices[0].vendorId.toString(16) + ':' +
                  devices[0].productId.toString(16) + ':' +
                  devices[0].deviceId.toString(16));
    }
  }
});

Cihaz Kimliği spesifikasyonu genellikle bir cihazın belirli bir modelini, hatta tedarikçi firmanın revizyonunu tanımlamak için yeterlidir. Cihazın bulunmadığı durumlarda, cihazın sınıfı veya türüyle ilgili bilgileri (isteğe bağlı olarak address içindeki üretici ön ekiyle birlikte) kullanmanız gerekir.

Çoğu Bluetooth cihaz, Cihaz Bilgileri Sınıfını Temel Bant Atanan Numaralar dokümanına göre yorumlanan bir bit alanı olarak sağlar. Bu bit alanı, deviceClass özelliğinde kullanılabilir.

chrome.bluetooth.getDevices(function(devices) {
  for (var i = 0; i < devices.length; i++) {
    if (devices[0].vendorIdSource != undefined) {
      console.log(devices[0].address + ' = ' +
                  devices[0].deviceClass.toString(16));
    }
  }
});

Alanın ayrıştırılması karmaşık bir işlem olabilir. Bu nedenle, en yaygın cihaz türlerinde Chrome bunu sizin için işler ve type alanını ayarlar. Bu özelliğin kullanılamadığı veya ihtiyaçlarınız için yetersiz olduğu durumlarda deviceClass öğesini sizin ayırmanız gerekir.

chrome.bluetooth.getDevices(function(devices) {
  for (var i = 0; i < devices.length; i++) {
    if (devices[0].vendorIdSource != undefined) {
      console.log(devices[0].address + ' = ' + devices[0].type);
    }
  }
});

RFCOMM ve L2CAP kullanma

Chrome uygulamaları, RFCOMM veya L2CAP hizmetlerini destekleyen herhangi bir cihaza bağlanabilir. Piyasadaki klasik Bluetooth cihazların çoğu buna dahildir.

Bir yuvaya bağlanılıyor

Bir cihazla bağlantı kurabilmek için üç şeye ihtiyacınız vardır. Bağlantıyı kurmak için kullanılan bir soket; bluetoothSocket.create kullanılarak oluşturulmuş bir soket, bağlanmak istediğiniz cihazın adresi ve hizmetin kendi UUID'si.

Bağlantıyı yapmadan önce bluetooth.getDevice veya cihaz keşif API'lerini kullanarak adaptörün cihazdan haberdar olduğunu doğrulamanız gerekir.

RFCOMM veya L2CAP protokolünün kullanılıp kullanılmayacağı ve cihazda SDP keşfi kullanılarak hangi kanalın ya da PSM'nin elde edildiği de dahil olmak üzere, altyapının kurulması için gereken bilgiler.

Örnek:

var uuid = '1105';
var onConnectedCallback = function() {
  if (chrome.runtime.lastError) {
    console.log("Connection failed: " + chrome.runtime.lastError.message);
  } else {
    // Profile implementation here.
  }
};

chrome.bluetoothSocket.create(function(createInfo) {
  chrome.bluetoothSocket.connect(createInfo.socketId,
    device.address, uuid, onConnectedCallback);
});

Daha sonra bu yuvaya veri (bluetoothSocket.send) gönderebilmek için yuva kimliğini tutun.

Yuvadan alma ve yuvaya gönderme

Bir yuvadan veri alma ve yuvaya gönderme işlemleri ArrayBuffer nesnelerini kullanır. ArrayBuffers hakkında bilgi edinmek için genel bakışa, JavaScript türünde diziler ve ArrayBuffer'ı String'den ve Dizeye dönüştürme başlıklı eğiticiye göz atın.

arrayBuffer uygulamasındaki verilerinizi göndermek için bluetoothSocket.send'i kullanın:

chrome.bluetoothSocket.send(socketId, arrayBuffer, function(bytes_sent) {
  if (chrome.runtime.lastError) {
    console.log("Send failed: " + chrome.runtime.lastError.message);
  } else {
    console.log("Sent " + bytes_sent + " bytes")
  }
})

Veri gönderme yönteminin aksine, veriler bir etkinlikte (bluetoothSocket.onReceive) alınır. Yuvalar duraklatılmadan oluşturulur (bluetoothSocket.setPaused bölümüne bakın). Bu nedenle bu etkinliğin işleyicisi genellikle bluetoothSocket.create ve bluetoothSocket.connect arasına eklenir.

chrome.bluetoothSocket.onRecieve.addListener(function(receiveInfo) {
  if (receiveInfo.socketId != socketId)
    return;
  // receiveInfo.data is an ArrayBuffer.
});

Yuva hataları ve bağlantı kesiliyor

Bağlantıyı kesme dahil olmak üzere yuva hatalarıyla ilgili bildirim almak için bluetoothSocket.onReceiveError etkinliğine bir işleyici ekleyin.

chrome.bluetoothSocket.onReceiveError.addListener(function(errorInfo) {
  // Cause is in errorInfo.error.
  console.log(errorInfo.errorMessage);
});

Priz bağlantısını kesme

Bağlantıyı kapatmak ve soketin bağlantısını kesmek için bluetoothSocket.disconnect'i kullanın.

chrome.bluetoothSocket.disconnect(socketId);

Yayıncılık hizmetleri

Chrome Uygulamaları, cihazlara giden bağlantılar yapmaya ek olarak RFCOMM veya L2CAP'yi destekleyen herhangi bir cihaz tarafından kullanılabilecek hizmetler de yayınlayabilir.

Yuvada dinleme

İki tür yayınlanmış hizmet desteklenir. RFCOMM en yaygın kullanılan yöntemdir ve çok sayıda cihaz ile profili kapsar:

var uuid = '1105';
chrome.bluetoothSocket.create(function(createInfo) {
  chrome.bluetoothSocket.listenUsingRfcomm(createInfo.socketId,
    uuid, onListenCallback);
});

L2CAP, diğer cihaz türlerini ve diğer cihaz türlerini ve donanım yazılımı yükleme gibi tedarikçiye özgü kullanımları kapsar.

var uuid = '0b87367c-f188-47cd-bc20-a5f4f70973c6';
chrome.bluetoothSocket.create(function(createInfo) {
  chrome.bluetoothSocket.listenUsingL2cap(createInfo.socketId,
    uuid, onListenCallback);
});

Her iki durumda da belirli bir kanal veya PSM ayırmak için isteğe bağlı bir bluetoothSocket.ListenOptions geçirilebilir. Geri çağırma, chrome.runtime.lastError üzerinden hata olduğunu, aksi takdirde işlemin başarılı olduğunu gösterir. Daha sonra bu yuvadan bağlantıları (bluetoothSocket.onAccept) kabul edebilmek için yuva kimliğini tutun.

İstemci bağlantılarını kabul etme

İstemci bağlantıları kabul edilir ve bluetoothSocket.onAccept etkinliği aracılığıyla uygulamanıza aktarılır.

chrome.bluetoothSocket.onAccept.addListener(function(acceptInfo) {
  if (info.socketId != serverSocketId)
    return;

  // Say hello...
  chrome.bluetoothSocket.send(acceptInfo.clientSocketId,
    data, onSendCallback);

  // Accepted sockets are initially paused,
  // set the onReceive listener first.
  chrome.bluetoothSocket.onReceive.addListener(onReceive);
  chrome.bluetoothSocket.setPaused(false);
});

İstemci bağlantılarını kabul etmeyi durdur

İstemci bağlantılarını kabul etmeyi durdurmak ve hizmeti yayından kaldırmak için bluetoothSocket.disconnect'i kullanın.

chrome.bluetoothSocket.disconnect(serverSocketId);

Düşük enerji kullanan cihazlarla etkileşimde bulunma

Bluetooth Düşük Enerji veya (Bluetooth Smart), güç tüketimini azaltmayı amaçlayan kablosuz bir teknolojidir. Bluetooth Düşük Enerji API'si, uygulamaların bir çevre birimine LE bağlantısında merkezi rolü uygulamasına olanak tanır. Aşağıdaki bölümlerde Bluetooth Düşük Enerji çevre birimlerini nasıl keşfedeceğiniz, bağlanacağınız ve bunlarla nasıl etkileşimde bulunacağınız açıklanmaktadır.

Çevre birimlerini keşfetme ve bunlara bağlanma

Geleneksel Bluetooth cihazlarda olduğu gibi LE çevre birimleri de Yakındaki cihazları keşfetme bölümünde açıklanan yöntemler kullanılarak keşfedilebilir . Bir LE cihazı, "Reklam Verileri" adı verilen veri paketleri göndererek kendisini bulunabilir hale getirir. Cihazın reklamcılık modunda olduğu söylenir. Reklam verileri, cihazda kullanılabilen hizmetlerin UUID'lerini içerebilir. Varsa bu UUID'lere ilgili bluetooth.Device nesnesinin uuids özelliği kullanılarak erişilebilir.

Bir LE cihazı, keşfedildikten sonra bluetoothLowEnergy.connect çağrısı yapılarak bağlanabilir. Böylece, uygulama kendi hizmetleriyle etkileşimde bulunabilir:

chrome.bluetooth.onDeviceAdded.addListener(function(device) {
  var uuid = '0000180d-0000-1000-8000-00805f9b34fb';
  if (!device.uuids || device.uuids.indexOf(uuid) < 0)
    return;

  // The device has a service with the desired UUID.
  chrome.bluetoothLowEnergy.connect(device.address, function () {
    if (chrome.runtime.lastError) {
      console.log('Failed to connect: ' + chrome.runtime.lastError.message);
      return;
    }

    // Connected! Do stuff...
    ...
  });
});

Bağlandıktan sonra, ilgili bluetooth.Device nesnesinin connected özelliği true değerine sahip olur. bluetoothLowEnergy.connect çağrıldığında uygulama, cihazla fiziksel bağlantıyla ilgili bir hak talebinde bulunur. bluetoothLowEnergy.connect çağrılmadan (ör. başka bir uygulama nedeniyle) cihaza fiziksel bir bağlantı kurulabilir. Bu durumda, uygulamanız cihazın hizmetleriyle etkileşimde bulunmaya devam edebilir ancak başka bir uygulamanın fiziksel bağlantıyı kesmesini önlemek için her zaman bluetoothLowEnergy.connect çağrısı yapması gerekir.

Uygulamanızın artık bağlanmasına gerek kalmadığında, bluetoothLowEnergy.disconnect çağırarak bağlantı talebini kaldırabilir:

chrome.bluetoothLowEnergy.disconnect(deviceAddress);

Bu işlemin, cihazın fiziksel bağlantısını kaldırmayacağını unutmayın. Çünkü cihazla etkin bağlantılar kullanan başka uygulamalar olabilir. Bazen uygulamanın kontrolü dışındaki nedenlerden dolayı (ör. cihaz kaybolur veya işletim sisteminin yardımcı programları kullanıcı tarafından açıkça bağlantısı kesilirse) bağlantısı kesilebilir. Uygulamanız, bağlantıda yapılan değişikliklerle ilgili bildirim almak ve gerekirse yeniden bağlanmak için bluetooth.onDeviceChanged etkinliğini izlemelidir.

Bağlandıktan sonra, Chrome'u çalıştıran cihaz merkezi rolde olur. Uzak cihazın çevre birimi rolünde olduğu söylenir. Bu noktada uygulamanız, aşağıdaki bölümde açıklanan yöntemleri kullanarak cihazdaki hizmetlerle etkileşimde bulunabilir. Not: API'ler şu anda LE çevre birimi işlevini desteklemez. Uygulamalar yalnızca merkezi rolü uygulayabilir.

Hizmetler, Özellikler ve Tanımlayıcılar

Bluetooth Düşük Enerji, Özellik Protokolü (ATT) adı verilen basit bir istek-yanıt protokolüne dayanır. ATT'yi kullanan merkezi bir cihaz, Genel Özellik Profili (GATT) adlı özel bir Bluetooth profiline uyarlayarak çevre birimi cihazındaki özellikler ile etkileşim kurar. GATT aşağıdaki üst düzey kavramları tanımlar:

  • Hizmet: GATT hizmeti, bir cihazın belirli bir işlevini yerine getirmek için gereken veri koleksiyonunu ve ilişkili davranışları temsil eder. Örneğin, bir nabız monitöründe genellikle en az bir "Nabız Hizmeti" bulunur. GATT hizmetiyle ilgili bilgiler bluetoothLowEnergy.Service nesnesinde bulunur.
  • Özellik: GATT özelliği, bir GATT hizmeti oluşturmak için kullanılan temel bir veri öğesidir. Bir değer ve söz konusu değere nasıl erişilebileceğini tanımlayan özellikler içerir. Örneğin, "Nabız Hizmeti", kullanıcının nabız değerini elde etmek için kullanılan "Nabız Ölçümü" özelliğine sahiptir. Bir GATT özelliği ile ilgili bilgiler, bluetoothLowEnergy.Characteristic nesnesinde yer alır.
  • Açıklayıcı: GATT özelliği açıklayıcısı, bir özellik hakkında daha fazla bilgi içerir. GATT karakteristik tanımlayıcısıyla ilgili bilgiler, bluetoothLowEnergy.Descriptor nesnesinde bulunur.

Bluetooth Düşük Enerji API'si, uygulamaların bluetoothLowEnergy.getServices, bluetoothLowEnergy.getCharacteristics ve bluetoothLowEnergy.getDescriptors çağrıları yoluyla cihazların hizmetleri, özellikleri ve tanımlayıcıları hakkında bilgi bulmasına olanak tanır. Uygulamalar, uuid alanlarını istenen GATT UUID ile karşılaştırarak hizmetleri, özellikleri ve tanımlayıcıları filtreleyebilir:

chrome.bluetoothLowEnergy.getServices(deviceAddress, function(services) {
  ...
  for (var i = 0; i < services.length; i++) {
    if (services[i].uuid == HEART_RATE_SERVICE_UUID) {
      heartRateService = services[i];
      break;
    }
  }
  ...
});

API aracılığıyla erişilebilen her hizmet, özellik ve tanımlayıcıya, instanceId alanı kullanılarak edinilebilecek benzersiz bir örnek tanımlayıcısı atanır. Bu örnek kimliği bir GATT nesnesini tanımlamak ve bu nesne üzerinde belirli işlemler gerçekleştirmek için kullanılabilir:

chrome.bluetoothLowEnergy.getCharacteristics(heartRateService.instanceId,
                                             function(chracteristics) {
  ...
  for (var i = 0; i < characteristics.length; i++) {
    if (characteristics[i].uuid == HEART_RATE_MEASUREMENT_UUID) {
      measurementChar = characteristics[i];
      break;
    }
  }
  ...
  chrome.bluetoothLowEnergy.getDescriptors(measurementChar.instanceId,
                                           function(descriptors) {
    ...
  });
});

Hizmet etkinlikleri

Bir cihaz bağlandıktan sonra Chrome, sunduğu hizmetleri keşfeder. Her hizmet keşfedilip kaldırıldığında, uygulama bluetoothLowEnergy.onServiceAdded ve bluetoothLowEnergy.onServiceRemoved etkinliklerini alır:

  var initializeService = function(service) {
    if (!service) {
      console.log('No service selected!');
      // Reset UI, etc.
      ...
      return;
    }

    myService = service;

    // Get all the characteristics and descriptors and bootstrap the app.
    ...
  };

  chrome.bluetoothLowEnergy.onServiceAdded.addListener(function(service) {
    if (service.uuid == MY_SERVICE_UUID)
      initializeService(service);
  });

  chrome.bluetoothLowEnergy.onServiceRemoved.addListener(function(service) {
    if (service.instanceId == myService.instanceId)
      initializeService(null);
  });

Chrome, bir hizmetin tüm özelliklerini ve tanımlayıcılarını eşzamansız olarak keşfeder ve keşif tamamlandığında bluetoothLowEnergy.onServiceAdded etkinliğini gönderir. Bir çevre birimi bağlantısı sonlandırılırsa Chrome ilgili tüm hizmetleri kaldırır ve bluetoothLowEnergy.onServiceRemoved etkinliğini gönderir.

Bazı çevre birimleri, hizmetlerini değiştirebilir. Örneğin bir hizmetin özellikleri değişebilir veya hizmetler tamamen eklenip kaldırılabilir. Chrome, bu değişiklikleri bluetoothLowEnergy.onServiceChanged, bluetoothLowEnergy.onServiceAdded ve bluetoothLowEnergy.onServiceRemoved etkinliklerini kullanarak bildirir.

  chrome.bluetoothLowEnergy.onServiceChanged.addListener(function(service) {
    if (service.instanceId != myService.instanceId)
      return;

    updateMyService(service);
  });

Bir özelliğin değerini okuma ve yazma

GATT özelliği, hizmetinin bir yönünü kodlar. Merkezi bir uygulama, bir özelliğin değeri üzerinde çalışarak çevre biriminin hizmetlerini okur, değiştirir ve hizmet durumunu değiştirir. Karakteristik değer bir bayt dizisidir ve anlamı belirli bir özelliği tanımlayan üst düzey spesifikasyon tarafından tanımlanır. Örneğin, Nabız Ölçümü özelliğinin değeri kullanıcının nabzını ve yakılan toplam kalori miktarını kodlarken, Vücut Sensörü Konumu özelliği, nabız sensörünün vücutta takılması gereken yeri kodlar.

Chrome, bir özelliğin değerini okumak için bluetoothLowEnergy.readCharacteristicValue yöntemini sağlar:

chrome.bluetoothLowEnergy.readCharacteristicValue(chrc.instanceId,
                                                  function(result) {
  if (chrome.runtime.lastError) {
    console.log('Failed to read value: ' + chrome.runtime.lastError.message);
    return;
  }

  var bytes = new Uint8Array(result.value);

  // Do stuff with the bytes.
  ...
});

Bazı özellikler yazılabilirdir. Özellikle değeri yazmanın yan etkileri olan "Denetim Noktaları" olarak davranan özellikler yazılabilir. Örneğin, Nabız Kontrol Noktası özelliği, bir nabız sensörüne yakılan toplam kalori sayısını sıfırlamasını söyler ve yalnızca yazma işlemlerini destekler. Bunu gerçekleştirmek için Chrome, bluetoothLowEnergy.writeCharacteristicValue yöntemini sağlar:

var myBytes = new Uint8Array([ ... ]);
chrome.bluetoothLowEnergy.writeCharacteristicValue(chrc.instanceId,
                                                   myBytes.buffer,
                                                   function() {
  if (chrome.runtime.lastError) {
    console.log('Failed to write value: ' +
                chrome.runtime.lastError.message);
    return;
  }

  // Value is written now.
});

Karakteristik tanımlayıcılar aynı şekilde davranır ve okunabilir ve/veya yazılabilir olabilir. Chrome, bir tanımlayıcının değerini okumak ve yazmak için bluetoothLowEnergy.readDescriptorValue ve bluetoothLowEnergy.writeDescriptorValue yöntemleri sağlar.

Uygulama, bir özelliğin okuma veya yazma işlemlerini destekleyip desteklemediğini kontrol etmek için bluetoothLowEnergy.Characteristic nesnesinin properties alanını kontrol edebilir. Bu alan, bir değere erişmek için gereken güvenlik şartları hakkında bilgi içermez ancak ilgili özelliğin genel olarak hangi değer işlemini desteklediğini açıklar.

Değer bildirimlerini işleme

Bazı özellikler, bildirimlerin veya göstergelerin kullanılmasını sağlar. Örneğin, Nabız Ölçümü özelliği okunamaz veya yazılabilir değildir ancak düzenli aralıklarla güncel değeriyle ilgili güncellemeler gönderir. Uygulamalar, bluetoothLowEnergy.onCharacteristicValueChanged etkinliğini kullanarak bu bildirimleri dinleyebilir.

  chrome.bluetoothLowEnergy.onCharacteristicValueChanged.addListener(
      function(chrc) {
    if (chrc.instanceId != myCharId)
      return;

    var bytes = new Uint8Array(chrc.value);

    // Do stuff with the bytes.
    ...
  });

Bir özellik bildirimleri/göstergeleri desteklese bile varsayılan olarak etkin değildir. Bir uygulama, bluetoothLowEnergy.onCharacteristicValueChanged etkinliğini başlatmak veya durdurmak için bluetoothLowEnergy.startCharacteristicNotifications ve bluetoothLowEnergy.stopCharacteristicNotifications yöntemlerini çağırmalıdır.

  // Start receiving characteristic value notifications.
  var notifying = false;
  chrome.bluetoothLowEnergy.startCharacteristicNotifications(chrc.instanceId,
                                                             function() {
    if (chrome.runtime.lastError) {
      console.log('Failed to enable notifications: ' +
                  chrome.runtime.lastError.message);
      return;
    }

    notifying = true;
  });

  ...

  // No longer interested in notifications from this characteristic.
  if (notifying) {
    chrome.bluetoothLowEnergy.stopCharacteristicNotifications(
        chrc.instanceId);
  }

Bildirimler başlatıldıktan sonra, özellikten her bildirim veya gösterge alındığında uygulama bluetoothLowEnergy.onCharacteristicValueChanged bilgisini alır. Karakteristik okumaları destekliyorsa bu etkinlik, bluetoothLowEnergy.readCharacteristicValue başarılı bir çağrıdan sonra da gönderilir. Böylece uygulamalar, okuma isteği ve bildirimler aracılığıyla tetiklenen bir değer güncellemesinin kontrol akışını birleştirmesini sağlar:

  chrome.bluetoothLowEnergy.onCharacteristicValueChanged.addListener(
      function(chrc) {
    // Process the value.
    ...
  });

  chrome.bluetoothLowEnergy.startCharacteristicNotifications(chrc.instanceId,
                                                             function() {
    // Notifications started. Read the initial value.
    chrome.bluetoothLowEnergy.readCharacteristicValue(chrc.instanceId,
                                                      function(result) {
      ...
      // No need to do anything here since onCharacteristicValueChanged
      // will handle it.
    });
  });

Bir özellik bildirimleri destekliyorsa properties alanı, "notify" veya "indicate" özelliğini içerir.

NOT: Bir özellik bildirimleri/göstergeleri destekliyorsa bildirimleri etkinleştirmek/devre dışı bırakmak için "İstemci Özelliği Yapılandırması" tanımlayıcısı bulunur. Chrome, uygulamaların bu tanımlayıcıya yazmasına izin vermez. Uygulamalar, bildirim davranışını kontrol etmek için bunun yerine bluetoothLowEnergy.startCharacteristicNotifications ve bluetoothLowEnergy.stopCharacteristicNotifications yöntemlerini kullanmalıdır.