2

我正在尝试使用 c# 的 32feet 库读取联系人。我正在通过蓝牙将我的 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 是否错误,或者我需要不同的蓝牙?

4

1 回答 1

1

虽然我不是 32feet 方面的专家,但我知道检索 vcardName HeaderGET请求应该是null. 为什么不尝试使用空或nullURI?

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

评论

对于对象交换,方法代码映射到等效的 HTTP 样式方法。例如“PUT”、“GET”等。“PUT”是默认值。从 2.5 版开始,新增了对 GET 的支持。

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

它是从这里引用的。

编辑

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

--根据维基百科,TARGET当您连接到phonebook access.

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

于 2018-03-04T15:49:35.217 回答