2016-09-02 58 views
0

方法Windows.Devices.Enumeration.DeviceInformation.findAllAsync返回DeviceInformation的集合。該對象的屬性name被指定爲設備藍牙名稱。但是,該屬性包含的值如HM-12,SPP Dev或SerialPort,我假設它們是藍牙協議的名稱。DeviceInformation.name顯示藍牙版本而不是名稱

下面是例子。請注意,此代碼工作正常的Windows之前升級(哪個版本造成​​的,這是未知的)

在Windows 10移動10.0.14393.67

的Windows桌面10輸出正確的結果工作。

var rfcomm = Windows.Devices.Bluetooth.Rfcomm; 
var sockets = Windows.Networking.Sockets; 
var streams = Windows.Storage.Streams; 
var deviceInfo = Windows.Devices.Enumeration.DeviceInformation; 

var cordova = require('cordova'); 
module.exports = { 

    connService: null, 
    connSocket: null, 
    connWriter: null, 
    connReader: null, 
    connDevice: null, 

    list: function(successCallback, errorCallback) { 

    setTimeout(function() { 
     try { 
     var selector = 
      rfcomm.RfcommDeviceService.getDeviceSelector(
      rfcomm.RfcommServiceId.serialPort); 
     var parsedDevices = []; 

     deviceInfo.findAllAsync(selector, null).then(function(devices) { 
      if (devices.length > 0) { 

      for (var i = 0; i < devices.length; i++) { 
       parsedDevices.push({ 
       id: devices[i].id, 
       name: devices[i].name 
       }) 
       successCallback(parsedDevices); 
      } 
      } else { 
      errorCallback("No devices found."); 
      } 

     }, function(error) { 
      errorCallback({ 
      error: "list", 
      message: error.message 
      }); 
     }); 


     } catch (ex) { 
     errorCallback(ex); 
     } 


}, 0); 
    } 
} 

價值選擇的(視窗10移動):

System.Devices.DevObjectType:=10 AND System.Devices.AepService.ProtocolId:="{E0CBF06C-CD8B-4647-BB8A-263B43F0F974}" AND System.Devices.AepService.ServiceClassId:="{B142FC3E-FA4E-460B-8ABC-072B628B3C70}" AND System.Devices.AepService.Bluetooth.ServiceGuid:="{00001101-0000-1000-8000-00805F9B34FB}" AND System.Devices.AepService.ParentAepIsPaired:=System.StructuredQueryType.Boolean#True 

價值選擇的(視窗10 PC) - 工程確定

System.Devices.InterfaceClassGuid:=\"{B142FC3E-FA4E-460B-8ABC-072B628B3C70}\" AND System.DeviceInterface.Bluetooth.ServiceGuid:=\"{00001101-0000-1000-8000-00805F9B34FB}\" AND System.Devices.InterfaceEnabled:=System.StructuredQueryType.Boolean#True 

回答

0

問題

你的選擇只尋找匹配串口描述的設備/服務,這就是爲什麼你得到像SPP Dev或串行端口這樣的名字。

解決方案

Windows 10 sample for BluetoothRFcommChat採取找藍牙設備使用以下AQS查詢:

// Any extra properties you need 
var requestedProperties = null 

// The magic happens here, "e0cbf06c-cd8b-4647-bb8a-263b43f0f974" is 
// the GUID for any Bluetooth device. 
var selector = "(System.Devices.Aep.ProtocolId:=\"{e0cbf06c-cd8b-4647-bb8a-263b43f0f974}\")" 

// Then run findAllAsync with these new filters 
deviceInfo.findAllAsync(selector, requestedProperties).then(function(devices) { 
    // Your code here 
} 
+0

你好,我已經試過你提出的選擇,它不會返回找到任何設備。我已經把我的選擇器更新後。 – Marek