使用MCNearbyServiceBrowser的先前连接的蓝牙设备的历史记录

时间:2014-01-22 13:22:52

标签: ios7 bluetooth multipeer-connectivity

我正在使用MCNearbyServiceBrowser来发现附近的蓝牙设备&邀请invitePeer: toSession: withContext: timeout:

现在的问题是我想保留所有连接设备的历史记录。如果再次附近,将来重新连接它们(通过在UITableview中单击它们)。这可能吗?它是否符合Apple的政策?感谢。

更新

我已经实现了目标,因为“jamdaddy25”回答(在他回答:P之前)&它的工作正常......但是,如果两个设备具有相同的名称呢?在这种情况下,将不显示列表中的两个或更多设备之一的问题。我不希望这样。顺便说一句,感谢您的回复。

1 个答案:

答案 0 :(得分:2)

您可以保留peerID显示名称。这是MCPeerID上的属性。当您开始浏览时,要么在用户选择之前连接的对等点之前,要么在进入该屏幕时开始浏览,请循环访问附近的对等点,看看您是否有显示名称匹配。如果是这样,您可以系统地发送邀请并重新建立连接。

您甚至可以这样做,因此以前唯一可选择的连接是当前附近的对等连接。

<强>更新: 因此,为了确保您没有对等名称冲突,您需要使名称唯一。 我知道如何执行此操作的最佳方法是创建基于UUID的名称。我将其保存在一个简单的对象(下面的UserPeerInfo)中并将其保存/加载到NSUserDefaults,因此该对等名称将始终用于此对等

// Initialize with any stored data
if (!_userPeerInfo) {

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    if ([defaults objectForKey:@"userPeerInfo"]) {
        NSData *userPeerInfoData = [defaults objectForKey:@"userPeerInfo"];
        _userPeerInfo = (UserPeerInfo*)[NSKeyedUnarchiver unarchiveObjectWithData:userPeerInfoData];
    } else
    {
        NSString *peerName = [[NSUUID UUID] UUIDString];
        _userPeerInfo.peerName = peerName;
        NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
        // Create an NSData representation
        NSData *data = [NSKeyedArchiver archivedDataWithRootObject:_userPeerInfo];
        [defaults setObject:data forKey:@"userPeerInfo"];
        [defaults synchronize];
    }
}

然后在设置对等名称并初始化时,使用该对等名称,如正常

self.peerId = [[MCPeerID alloc] initWithDisplayName:self.userPeerInfo.peerName];
self.advertiser = [[MCNearbyServiceAdvertiser alloc] initWithPeer:self.peerId discoveryInfo:info serviceType:kServiceType];
self.advertiser.delegate = self;
[self.advertiser startAdvertisingPeer];