4

我正在开发和应用程序,我需要在其中显示设备的蓝牙信息。我终于在蓝牙mac地址方面取得了一些成功,但无法获得设备名称。有没有办法通过一些公共api合法地获取设备名称?

NSString*btMacAddr = @"Bt ";
BOOL                        success;
struct ifaddrs *            addrs;
const struct ifaddrs *      cursor;
const struct sockaddr_dl *  dlAddr;
const uint8_t *             base;

success = getifaddrs(&addrs) == 0;
if (success) {
    cursor = addrs;
    while (cursor != NULL) {
        if ( (cursor->ifa_addr->sa_family == AF_LINK)
            && (((const struct sockaddr_dl *) cursor->ifa_addr)->sdl_type == IFT_ETHER)
            && (strcmp(cursor->ifa_name, "en0") == 0)) {
            dlAddr = (const struct sockaddr_dl *) cursor->ifa_addr;
            base = (const uint8_t *) &dlAddr->sdl_data[dlAddr->sdl_nlen];

            if (dlAddr->sdl_alen == 6) {
                //fprintf(stderr, ">>>             WIFI MAC ADDRESS: %02x:%02x:%02x:%02x:%02x:%02x\n", base[0], base[1], base[2], base[3], base[4], base[5]);
                //fprintf(stderr, ">>> IPHONE BLUETOOTH MAC ADDRESS: %02x:%02x:%02x:%02x:%02x:%02x\n", base[0], base[1], base[2], base[3], base[4], base[5]+1);
                btMacAddr = [NSString stringWithFormat:@"Mac Address  :  %02x : %02x : %02x : %02x : %02x : %02x", base[0], base[1], base[2], base[3], base[4], base[5]+1];


            } else {
                fprintf(stderr, "ERROR - len is not 6");
            }
        }
        cursor = cursor->ifa_next;
    }
    freeifaddrs(addrs);
}
4

2 回答 2

1

那么是不是类似于:[[UIDevice currentDevice] name];

这给出了 iOS 设备的名称,例如“Henriks iPhone”

于 2013-03-31T09:28:06.550 回答
0

它在文档中没有明确说明,但在 CBCentralManagerDelegate 方法中,例如centralManager:didDiscoverPeripheral:advertisementData:RSSI:,传递给委托的参数之一是 CBPeripheral。

有趣的是,Apple 并没有列出任何 CBPeripheral 的官方文档,但是如果你查看 CBPeripheral.h 的头文件,它看起来像有一个“_name ”字段,您可以从中提取(对于我自己来说,当我做“”时编译器没有抱怨peripheral.name,好像它定义了一些属性)

但话又说回来,为了验证我的答案,我尝试下载Apple 的 CoreBluetooth 温度传感器示例代码,并在我的 iPhone 4S 上使用“”命令运行它,但没有取得太大成功(即使设备中的蓝牙确实设置为打开[centralManager scanForPeripheralsWithServices:nil options:nil];,也会产生“ ”错误设置)。CoreBluetooth[WARNING] <CBConcreteCentralManager: 0x2087fc00> is not powered on

无论如何,我希望我的提示能真正帮助你。

于 2013-03-29T09:15:40.527 回答