2016-09-02 29 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