zoukankan      html  css  js  c++  java
  • windows phone 8.1 让项目开启蓝牙genericAttributeProfile

    1.打开项目里面的  Package.appxmanifest 文件

       找到<Capabilities>节点,添加代码如下,其中

    serviceId:6006 可以自己修改值
     <m2:DeviceCapability Name="bluetooth.genericAttributeProfile">
          <m2:Device Id="any">
            <m2:Function Type="serviceId:6006" />
          </m2:Device>
        </m2:DeviceCapability>
      </Capabilities>

    2.蓝牙核心代码

     
            GattDeviceService gattDeviceService;
            GattCharacteristic characteristic;
            GattCharacteristic writeCharateristic;
            #region 蓝牙管理
            public async Task<bool> Connect(string deviceName = "mydevice")
            {
                if (IsConnected) return true;
    
                bool result = false;
                if (gattDeviceService != null)
                    gattDeviceService = null;
    
                try
                {
    
                    var devices = await GetDevices();
                    string s = "";
                    foreach (var item in devices)
                    {
                        s += item.Name + "   ,";
                    }
                    P(s);
                    foreach (var item in devices)
                    {
                        if (item.Name.ToLower().Contains(deviceName.ToLower()))
                        {
                            //已经配对 如果找不到提示用户先去蓝牙设置配对
                            gattDeviceService = await GattDeviceService.FromIdAsync(item.Id);
                            if (gattDeviceService != null)
                            {
                                var status = await Config();
                                if (status == GattCommunicationStatus.Success)
                                    return true;
                                else
                                {
                                    characteristic = null;
                                    return false;
                                }
                            }
                            else
                            {
                                //提示用户  无法连接
                            }
                        }
                    }
                }
                catch
                {
    
                }
                return result;
            }
            public bool IsBluetoothOpened
            {
                get
                {
                    return isBlueBootoothOpend();
                }
            }
            internal bool IsConnected
            {
                get { return characteristic != null; }
            }
    
            /// <summary>
            /// 判断蓝牙是否打开
            /// </summary>
            /// <returns></returns>
            private bool isBlueBootoothOpend()
            {
                try
                {
                    try
                    {
                        PeerFinder.AlternateIdentities["Bluetooth:Paired"] = "";
                        var peers = PeerFinder.FindAllPeersAsync().AsTask().Result;
                        return true;
                    }
                    catch (Exception ex)
                    {
                        if ((uint)ex.HResult == 0x8007048F || ex.HResult == -2146233088)
                        {
                            return false;
                        }
                        return true;
                    }
                }
                catch
                {
                    return false;
                }
            }
    
    
            internal async Task<DeviceInformationCollection> GetDevices()
            {
                var serverID = @"00008009-0000-1000-7000-00805f9b8875";  //Serive ID
                var zeCircleGUID = GattDeviceService.GetDeviceSelectorFromUuid(Guid.Parse(serverID));
                var devices = await Windows.Devices.Enumeration.DeviceInformation.FindAllAsync(zeCircleGUID);
    
                return devices;
            }
            private async Task<GattCommunicationStatus> Config()
            {
                GattCommunicationStatus status = GattCommunicationStatus.Unreachable;
                characteristic = null;
                characteristic = gattDeviceService.GetCharacteristics(Guid.Parse("00008002-0000-1000-8000-00805f9b34fb"))[0];
                writeCharateristic = gattDeviceService.GetCharacteristics(Guid.Parse("00008001-0000-1000-8000-00805f9b34fb"))[0];
                if (characteristic != null)
                {
    
                    var currentDescriptorValue = await characteristic.ReadClientCharacteristicConfigurationDescriptorAsync();
                    if (currentDescriptorValue.Status == GattCommunicationStatus.Success)
                    {
                        status = await characteristic.WriteClientCharacteristicConfigurationDescriptorAsync(
                           GattClientCharacteristicConfigurationDescriptorValue.Notify);
    
                        if (status == GattCommunicationStatus.Success)
                            characteristic.ValueChanged += characteristic_ValueChanged;
                    }
                }
    
                return status;
            }
    
    
            #endregion

    3.蓝牙数据接收部分

     public event EventHandler OnConnectionFailed;
            static UInt16 ReSendCount = 0;
            List<byte> receivedData = new List<byte>();
            private bool IsEnableReconnect = true;
            //数据处理
            public void characteristic_ValueChanged(GattCharacteristic sender, GattValueChangedEventArgs args)
            {
                byte[] data = new byte[args.CharacteristicValue.Length];
                DataReader.FromBuffer(args.CharacteristicValue).ReadBytes(data); //读取数据
                receivedData.AddRange(data);
            }
  • 相关阅读:
    命令行颜色换算器(基于python)
    VPS常用操作(自用)
    自动读取虚拟币ETC行情并语音提醒的小工具(mac OSX)
    nginx最基本操作
    一个平庸程序员的自白
    unity 2d游戏 按y坐标排序子对象
    开源输入法推荐
    unity插件,从一段文字中提取中文并去重
    考试总结(CE???)
    螺旋矩阵
  • 原文地址:https://www.cnblogs.com/HCCZX/p/5240959.html
Copyright © 2011-2022 走看看