Estoy usando el complemento "randdusing / cordova-plugin-bluetoothle" en la aplicación PhoneGap / Cordova para crear una aplicación Bluetooth. Estoy usando un ejemplo simple que se da en la página de GitHub del complemento. pero no obtengo ningún dispositivo en la lista, pero recibo un mensaje Scanning for devices (will continue to scan until you select a device)...

A continuación se muestra el código que estoy usando

document.addEventListener("deviceready", onDeviceReady, false);

  function onDeviceReady() {
      bluetoothle.initialize({
          request: true,
          statusReceiver: false
      }, initializeSuccess, handleError);
  }

  function initializeSuccess(result) {

      if (result.status === "enabled") {

          log("Bluetooth is enabled.");
          log(result);
      } else {

          document.getElementById("start-scan").disabled = true;

          log("Bluetooth is not enabled:", "status");
          log(result, "status");
      }
  }

  function handleError(error) {

      var msg;

      if (error.error && error.message) {

          var errorItems = [];

          if (error.service) {

              errorItems.push("service: " + (uuids[error.service] || error.service));
          }

          if (error.characteristic) {

              errorItems.push("characteristic: " + (uuids[error.characteristic] || error.characteristic));
          }

          msg = "Error on " + error.error + ": " + error.message + (errorItems.length && (" (" + errorItems.join(", ") + ")"));
      } else {

          msg = error;
      }

      log(msg, "error");

      if (error.error === "read" && error.service && error.characteristic) {

          reportValue(error.service, error.characteristic, "Error: " + error.message);
      }
  }
  var foundDevices = [];

  function startScan() {

      log("Starting scan for devices...", "status");

    

      document.getElementById("devices").innerHTML = "";
      document.getElementById("services").innerHTML = "";
      document.getElementById("output").innerHTML = "";

      if (window.cordova.platformId === "windows") {

          bluetoothle.retrieveConnected(retrieveConnectedSuccess, handleError, {});
      } else {

          bluetoothle.startScan(startScanSuccess, handleError, {
              services: []
          });
      }
  }

  function startScanSuccess(result) {
      log("startScanSuccess(" + result.status + ")");

      if (result.status === "scanStarted") {
          log("Scanning for devices (will continue to scan until you select a device)...", "status");
      } else if (result.status === "scanResult") {

          if (!foundDevices.some(function (device) {

                  return device.address === result.address;

              })) {

              log('FOUND DEVICE:');
              log(result);
              foundDevices.push(result);
              addDevice(result.name, result.address);
          }
      }
  }

  function retrieveConnectedSuccess(result) {

      log("retrieveConnectedSuccess()");
      log(result);

      result.forEach(function (device) {

        addDevice(device.name, device.address);

      });
  }

  function addDevice(name, address) {

      var button = document.createElement("button");
      button.style.width = "100%";
      button.style.padding = "10px";
      button.style.fontSize = "16px";
      button.textContent = name + ": " + address;

      button.addEventListener("click", function () {

          document.getElementById("services").innerHTML = "";
          connect(address);
      });

      document.getElementById("devices").appendChild(button);
  }

  function log(msg, level) {

      level = level || "log";

      if (typeof msg === "object") {

          msg = JSON.stringify(msg, null, "  ");
      }

      console.log(msg);

      if (level === "status" || level === "error") {

          var msgDiv = document.createElement("div");
          msgDiv.textContent = msg;

          if (level === "error") {

              msgDiv.style.color = "red";
          }

          msgDiv.style.padding = "5px 0";
          msgDiv.style.borderBottom = "rgb(192,192,192) solid 1px";
          document.getElementById("output").appendChild(msgDiv);
      }
  }

Este es mi primer proyecto Bluetooth LE en Córdoba. Por favor, ayúdenme y sugieran cualquier otro complemento mejor que este con buena documentación.

Gracias.

0
Ankit Sharma 15 ene. 2017 a las 19:14

1 respuesta

La mejor respuesta

Si está probando su aplicación en Android 6+, primero debe solicitar permiso para usar la funcionalidad Bluetooth del dispositivo. De lo contrario, su aplicación fallará silenciosamente y no verá ningún dispositivo descubierto. Puede utilizar el método integrado del complemento Bluetooth LE para este

bluetoothle.requestPermission().then(success, fail)

O puede agregar cordova-plugin-android-permissions, si también necesita solicitar otros permisos.

1
Wouter Seyen 6 mar. 2017 a las 10:12