Тип или имя пространства имен 'BluetoothAddress' не найден - PullRequest
0 голосов
/ 03 мая 2019

Я использую vs 2017 и Windows 7. Я установил 32feet.NET, выполнив следующие действия: Нужно написать Bluetooth 'hcitool' equivelant в Windows .

Но я получаю ошибки:

Не удалось найти тип или имя пространства имен «BluetoothAddress»

Не удалось найти тип или имя пространства имен «BluetoothClient»

Возможно имя типа или пространства имен «BluetoothSecurity»не найден

Не удалось найти тип или имя пространства имен 'BluetoothDeviceInfo'

Не удалось найти тип или имя пространства имен 'ServiceRecord'

Я успешно установил InTheHand.Devices.Bluetooth и В предложении об использовании нет предупреждения, поэтому на пространство имен успешно ссылаются.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;

using InTheHand.Devices.Bluetooth;
using InTheHand.Networking;
using InTheHand.Networking.Sockets;
using InTheHand;


using System.Diagnostics;
using System.Net.Sockets;

namespace hcitool
{
  partial class Program
  {
    static bool infoRatherThanName;
    static BluetoothAddress _searchAddress;

    static int Main(string[] args)
    {
        if (args.Length < 1)
        {
            Console.WriteLine("Please specify command.");
            return 2;
        }
        var cmd = args[0];
        switch (cmd)
        {
            case "name":
                infoRatherThanName = false;
                break;
            case "info":
                infoRatherThanName = true;
                break;
            //-
            case "dev":
                return ShowRadios();
            //case "auth":
            //    return CauseAuth(GETADDRESS());
            default:
                throw new NotImplementedException("Command: '" + cmd + "'");
        }
        if (args.Length < 2)
        {
            Console.WriteLine("Please specify device address.");
            return 2;
        }
        var addrS = args[1];
        _searchAddress = BluetoothAddress.Parse(addrS);

        //
        //var dev = new BluetoothDeviceInfo(_searchAddress);
        var dev = new BluetoothDevice();
        bool isInRange = GetCanConnectTo(dev);
        if (isInRange)
        {
            PrintDevice(dev);
        }
        else
        {
            Console.WriteLine("Can't see that device.");
        }
        //
        Console.WriteLine("simple");
        return Simple();
        //return Fancier();
    }

    //----
    private static int ShowRadios()
    {
        BluetoothRadio[] list;

        try
        {
            list = BluetoothRadio.AllRadios;
        }
        catch (Exception)
        {
            return 1;
        }
        Debug.Assert(list.Length != 0, "Expect zero radios case to raise an error.");
        foreach (var curR in list)
        {
            Console.WriteLine("* {0} '{1}'", curR.LocalAddress, curR.Name);
            Console.WriteLine("{0}", curR.SoftwareManufacturer);
            Console.WriteLine("{0}", curR.Manufacturer);
            Console.WriteLine("{0}", curR.Mode);
        }//for
        return 0;
    }

    private static int CauseAuth(BluetoothAddress addr)
    {
        BluetoothSecurity.PairRequest(addr, null);
        return 0;
    }

    //----
    static int Simple()
    {
        BluetoothDeviceInfo[] devices;
        BluetoothDeviceInfo foundDev = null;
        var cli = new BluetoothClient();
        // Fast: Remembered/Authenticated
        devices = cli.DiscoverDevices(255, true, true, false, false);
        SimpleCheckDevice(devices, ref foundDev);
        if (foundDev == null)
        {
            // Slow: Inquiry
            cli.DiscoverDevices(255, false, false, true, false);
            SimpleCheckDevice(devices, ref foundDev);
        }
        //
        if (foundDev != null)
        {
            return 0;
        }
        else
        {
            return 1;
        }
    }

    private static void SimpleCheckDevice(IEnumerable<BluetoothDeviceInfo> devices,
        ref BluetoothDeviceInfo foundDev)
    {
        foreach (var cur in devices)
        {
            if (cur.DeviceAddress == _searchAddress)
            {
                foundDev = cur;
                PrintDevice(cur);
            }
        }//for
    }

    private static void PrintDevice(BluetoothDeviceInfo cur)
    {
        Console.WriteLine("* Found device: '{0}' ", cur.DeviceName);
        if (infoRatherThanName)
        {
            try
            {
                var vs = cur.GetVersions();
                Console.WriteLine(vs.Manufacturer);
                Console.WriteLine(vs.LmpVersion);
                Console.WriteLine(vs.LmpSubversion);
                Console.WriteLine(vs.LmpSupportedFeatures);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Failed to get remote device versions info: "
                    + ex.Message);
            }
        }
    }

    //----
    private static bool GetCanConnectTo(BluetoothDeviceInfo device)
    {
        bool inRange;
        Guid fakeUuid = new Guid("{F13F471D-47CB-41d6-9609-BAD0690BF891}");
        try
        {
            ServiceRecord[] records = device.GetServiceRecords(fakeUuid);
            Debug.Assert(records.Length == 0, "Why are we getting any records?? len: " + records.Length);
            inRange = true;
        }
        catch (SocketException)
        {
            inRange = false;
        }
        return inRange;
    }

   }
}

Ответы [ 2 ]

0 голосов
/ 03 мая 2019

Адрес Bluetooth находится в пакете 32feet.NET .

Вы используете предварительную версию InTheHand, в которой отсутствует адрес Bluetooth , BluetoothRadio , BluetoothDeviceInfo и другие. Я думаю, что вы ссылаетесь на вики для 32feet.NET , который является устаревшим пакетом nuget. Если вы установите 32feet.NET v3.5.0.0 , вы найдете все недостающие привязки.

Добавление 32feet.NET и изменение пары вещей:

var dev = new BluetoothDevice(); 
//this becomes this:
var dev = new BluetoothDeviceInfo(_searchAddress);

успешно скомпилируется.

0 голосов
/ 03 мая 2019

Попробуйте добавить следующие пространства имен в ваш код:

using InTheHand.Net;
using InTheHand.Net.Sockets;
using InTheHand.Net.Bluetooth;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...