我尝试使用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是错误的,还是需要不同的蓝牙?
答案 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>