2017-01-15 87 views
0

我在PhoneGap/Cordova應用程序中使用「randdusing/cordova-plugin-bluetoothle」插件來創建藍牙應用程序。我正在使用插件的GitHub page上給出的一個簡單示例。但我沒有得到任何列出設備,但得到的消息Scanning for devices (will continue to scan until you select a device)...藍牙LE在PhoneGap /科爾多瓦的Suport應用程序

下面是我使用

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

這是我的第一款藍牙LE項目在科爾多瓦的代碼。請幫助我,並建議任何其他插件比這更好的文檔。

謝謝。

回答

0

如果您在Android 6+上測試您的應用程序,則需要首先請求許可才能使用設備的藍牙功能。否則,您的應用程序將悄然失敗,您將看不到任何已發現的設備。您可以使用Bluetooth LE插件的內置方法本

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

或者你也可以添加cordova-plugin-android-permissions,如果您需要請求其他權限也是如此。

相關問題