在c#中使用obex读取联系人

时间:2018-03-04 10:44:09

标签: c# bluetooth 32feet obex

我尝试使用32feet库读取c#的联系人。我通过蓝牙将我的PC连接到移动设备,当我尝试执行此代码时总是给我错误的请求错误

LocalInfo.SetServiceState(BluetoothService.PhonebookAccessPce, true);
BluetoothAddress addr = BluetoothAddress.Parse("00:00:00:00:00:00");
BluetoothEndPoint rep = new BluetoothEndPoint(addr, BluetoothService.PhonebookAccessPse);
BluetoothClient cli = new BluetoothClient();
cli.Connect(rep);

Uri uri = new Uri(ObexUri.UriSchemeObex + "://" + addr + "/telecom/pb.vcf");
ObexWebRequest request = new ObexWebRequest(uri);
request.Method = "GET";
request.ContentType = "text/x-vCard";
ObexWebResponse resp = (ObexWebResponse)request.GetResponse();

在构造函数中:

private BluetoothDeviceInfo localinfo = null;
public BluetoothDeviceInfo LocalInfo
    {
        get
        {
            return localinfo = (localinfo ?? new BluetoothDeviceInfo(BluetoothRadio.PrimaryRadio.LocalAddress));
        }
    }

我做错了什么? URI是错误的,还是需要不同的蓝牙?

1 个答案:

答案 0 :(得分:0)

虽然我不是32feet的专家,但我知道Name Header请求检索vcard的GET应为null。为什么不尝试使用空的null URI?

编辑我发现了一些要求您使用obex-ftp而不是obex的语句。

  

说明

     

对于Object Exchange,方法代码映射到等效的HTTP   风格方法。例如“PUT”,“GET”等。“PUT”是默认值   值。自版本2.5起,对GET有了新的支持。

     

要使用GET,请将Method更改为“GET”,您还必须使用scheme   URL中的“obex-ftp”而不是通常的“obex” - 除非你   知道您连接的默认OBEX服务器支持GET。

引自here

修改

  

电话簿访问类似于文件传输,但使用目标{0x79,   0x61,0x35,0xF0,0xF0,0xC5,0x11,0xD8,0x09,0x66,0x08,0x00,   0x20,0x0C,0x9A,0x66};电话簿条目可以列出(与各种   可能的排序和过滤器)并从某些目录中检索   在电信/使用GET和SETPATH

- 根据维基百科,当您连接到TARGET时,您应该将一些特定的UUID添加到phonebook access标题。

here中的代码类似,您不仅应在RFCOMM级别指定PBAP服务UUID 0000112f-0000-1000-8000-00805f9b34fb,还必须在类型标头中的OBEX级别指定目标标头UUID 0x79, 0x61, 0x35, (byte) 0xf0, (byte) 0xf0, (byte) 0xc5, 0x11, (byte) 0xd8, 0x09, 0x66, 0x08, 0x00, 0x20, 0x0c, (byte) 0x9a, 0x66。 / p>