gpt4 book ai didi

iphone - GKSession - 如果我关闭蓝牙和 Wi-Fi 怎么办?

转载 作者:行者123 更新时间:2023-12-03 18:28:59 25 4
gpt4 key购买 nike

我正在开发一款允许点对点连接的 iPhone 应用程序。据我了解,我可以选择使用 GKPeerPicker 或 GKSession。我不喜欢使用 PeerPicker 的想法,因为我想显示自定义界面,所以我决定使用 GKSession,嘿,好处是它也可以通过 Wi-Fi 运行,而 Peer Picker 则不行。

好的,那么问题是...如果用户同时关闭了蓝牙和 Wi-Fi 怎么办?在对等选择器中,会提示您无需离开应用程序即可打开蓝牙。 GKSession 没有它......但是哇等一下,看来我什至无法以编程方式检查蓝牙是否打开!

Carpe Cocoa claims no problem ,只需使用 Delegate 的 session:didFailWithError: 方法即可。但是,正如评论中所解释的那样……这似乎不再起作用了!根据我的经验,我同意。

还有其他方法可以以编程方式检查蓝牙是否打开吗?这是我应该利用可达性的东西吗?或者这只是苹果尚未修复的一个错误?

更具体地说,我正在创建这样的 session :

GKSession *aSession = [[GKSession alloc] initWithSessionID:nil
displayName:user.displayName
sessionMode:GKSessionModePeer];

self.gkSession = aSession;
[aSession release];

self.gkSession.delegate = self;
self.gkSession.available = YES;

[self.gkSession setDataReceiveHandler:self withContext:NULL];

该类实现了 GKSessionDelegate,我知道它正在工作,因为当我打开蓝牙时,调用委托(delegate)方法没有问题。我已经这样实现了它们:

#pragma mark -
#pragma mark GKSessionDelegate methods

- (void)session:(GKSession *)session peer:(NSString *)peerID didChangeState:(GKPeerConnectionState)state {
if (GKPeerStateAvailable == state) {
[session connectToPeer:peerID withTimeout:10];
} else if (GKPeerStateConnected == state) {
// gets user

NSError *error = nil;
[session sendData:user.connectionData
toPeers:[NSArray arrayWithObjects:peerID,nil]
withDataMode:GKSendDataReliable error:&error];
if (error)
NSLog(@"%@",error);
}
}



- (void)session:(GKSession *)session didReceiveConnectionRequestFromPeer:(NSString *)peerID {
NSError *error = nil;
[session acceptConnectionFromPeer:peerID error:&error];
if (error)
NSLog(@"%@",error);
}

- (void)session:(GKSession *)session connectionWithPeerFailed:(NSString *)peerID withError:(NSError *)error {
NSLog(@"%@",error);
}

- (void)session:(GKSession *)session didFailWithError:(NSError *)error {
NSLog(@"%@",error);
}

没有打印任何日志语句,并且我在每个方法中设置了断点,但是当用户关闭蓝牙和 Wi-Fi 时,没有一个断点被命中。我希望发生一些事情来触发 session:didFailWithError: 这样我就可以提示用户打开蓝牙或连接到 Wi-Fi 网络。

最佳答案

现在在 iOS 5 中,可以这样实现:

NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:FALSE], CBCentralManagerScanOptionAllowDuplicatesKey, nil];
NSMutableArray * discoveredPeripherals = [NSMutableArray new];
CBCentralManager * manager = [[CBCentralManager alloc] initWithDelegate:self queue:nil];
[manager scanForPeripheralsWithServices:discoveredPeripherals options:options];
[manager stopScan];

这需要您在 iOS 5 中导入 CoreBluetooth 框架。如果蓝牙关闭,系统会弹出一个警报 View ,提供打开蓝牙的选择。否则,如果它找到外围设备,它将调用相应的委托(delegate)方法,但如果该实现中没有任何内容,则无需担心。

关于iphone - GKSession - 如果我关闭蓝牙和 Wi-Fi 怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2304201/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com