在iOS中通过蓝牙在两台设备之间传输NSString
我想通过蓝牙在两台iOS设备之间传输在iOS中通过蓝牙在两台设备之间传输NSString,ios,iphone,bluetooth,nsstring,file-transfer,Ios,Iphone,Bluetooth,Nsstring,File Transfer,我想通过蓝牙在两台iOS设备之间传输NSString。任何人都可以帮助如何通过蓝牙传输NSString?我搜索了具体的答案和示例代码,但没有找到。请引导我 提前感谢 查看Apple开发者论坛的源代码以了解 我希望这将有助于您使用蓝牙将字符串或任何数据从一台设备传输到另一台设备。我将更广泛地介绍如何使用MCSession处理这种简单的情况,因为我第一次熟悉MCSession,我惊讶地发现,关于如何使用简单的MCSession而不添加MCBrowserViewController的额外层的信息是如此
NSString
。任何人都可以帮助如何通过蓝牙传输NSString
?我搜索了具体的答案和示例代码,但没有找到。请引导我
提前感谢 查看Apple开发者论坛的源代码以了解
我希望这将有助于您使用蓝牙将字符串或任何数据从一台设备传输到另一台设备。我将更广泛地介绍如何使用
MCSession
处理这种简单的情况,因为我第一次熟悉MCSession
,我惊讶地发现,关于如何使用简单的MCSession
而不添加MCBrowserViewController
的额外层的信息是如此之少
在.h中,添加以下委托:MCSessionDelegate
,mcnearbyservicecadvertiserdelegate
,以及MCNearbyServiceBrowserDelegate
。还为mcpeirid*devicepeirid
、MCSession*session
、MCNearbyServiceAdvertiser*serviceAdvertiser
和MCNearbyServiceBrowser*nearbyServiceBrowser
声明类实例变量
在.m中,在viewDidLoad期间或您希望启动MCSession
之前的任何其他时间,初始化您的MCJerid
:
devicePeerId = [[MCPeerID alloc] initWithDisplayName:DISPLAY_NAME];
然后使用该mcpeirid
初始化MCSession
:
session = [[MCSession alloc] initWithPeer:devicePeerId securityIdentity:nil encryptionPreference:MCEncryptionNone];
session.delegate = self;
现在,为了避免使用MCBrowserViewController
,您必须初始化自己的MCNearbyServiceAdvertiser
以允许您的设备播发会话,MCNearbyServiceBrowser
以允许您的设备查找会话,或者,您甚至可以在同一台设备上同时初始化这两个设备,以便同时进行广告和浏览:
serviceAdvertiser = [[MCNearbyServiceAdvertiser alloc] initWithPeer:myDevicePeerId discoveryInfo:nil serviceType:SERVICE_TYPE];
serviceAdvertiser.delegate = self;
// (I've set discoveryInfo to nil here, but it can also contain an NSDictionary of data to pass along to browsers who find this advertiser via the browser:foundPeer:withDiscoveryInfo method)
nearbyServiceBrowser = [[MCNearbyServiceBrowser alloc] initWithPeer:myDevicePeerId serviceType:SERVICE_TYPE];
nearbyServiceBrowser.delegate = self;
接下来,如果已将设备设置为广告客户,则需要实现mcnearbyserviceadvertiserregate
方法
要从浏览同龄人处接收邀请,请执行以下操作:
- (void)advertiser:(MCNearbyServiceAdvertiser *)advertiser didReceiveInvitationFromPeer:(MCPeerID *)peerID withContext:(NSData *)context invitationHandler:(void (^)(BOOL, MCSession *))invitationHandler {
NSLog(@"invitation received");
if (want_to_accept_invitation)
invitationHandler(YES, session);
else
invitationHandler(NO, session);
}
如果设备因某种原因尚未开始广告,则接收错误:
- (void)advertiser:(MCNearbyServiceAdvertiser *)advertiser didNotStartAdvertisingPeer:(NSError *)error {
NSLog(@"Did not start advertising error: %@", error);
}
同样,如果已将设备设置为浏览器,则需要实现MCNearbyServiceBrowserDelegate
方法:
// Peer found
- (void)browser:(MCNearbyServiceBrowser *)browser foundPeer:(MCPeerID *)peerID withDiscoveryInfo:(NSDictionary *)info {
NSLog(@"Session Manager found peer: %@", peerID);
if (want_to_connect)
[serviceBrowser invitePeer:peerID toSession:session withContext:nil timeout:CONNECTION_TIMEOUT];
}
// Peer lost, ex. out of range
- (void)browser:(MCNearbyServiceBrowser *)browser lostPeer:(MCPeerID *)peerID {
NSLog(@"Session Manager lost peer: %@", peerID);
}
- (void)browser:(MCNearbyServiceBrowser *)browser didNotStartBrowsingForPeers:(NSError *)error {
NSLog(@"Did not start browsing for peers: %@", error);
}
然后,您需要使用MCSessionDelegate
方法来帮助通知用户更改连接状态,并方便数据的发送和接收:
- (void)session:(MCSession *)session didReceiveCertificate:(NSArray *)certificate fromPeer:(MCPeerID *)peerID certificateHandler:(void (^)(BOOL accept))certificateHandler {
NSLog(@"Did receive certificate");
certificateHandler(true);
}
// To detect changes in the state of your connections with your peers….
- (void)session:(MCSession *)session peer:(MCPeerID *)peerID didChangeState:(MCSessionState)state {
switch (state) {
case MCSessionStateConnected: {
NSLog(@"Connected to %@", peerID);
// If you'd like to send your text string as soon as you're connected...
NSError *error;
[session sendData:[@"text" dataUsingEncoding:NSUTF8StringEncoding] toPeers:[NSArray arrayWithObject:peerID] withMode:MCSessionSendDataReliable error:&error];
break;
} case MCSessionStateConnecting: {
NSLog(@"Connecting to %@", peerID);
break;
} case MCSessionStateNotConnected: {
break;
}
}
}
- (void)session:(MCSession *)session didReceiveData:(NSData *)data fromPeer:(MCPeerID *)peerID {
NSLog(@"Did receive data.");
/// Receive the string here.
NSString *message = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
}
请注意,为了发送数据,我使用了:
[session sendData:[@"text" dataUsingEncoding:NSUTF8StringEncoding] toPeers:[NSArray arrayWithObject:peerID] withMode:MCSessionSendDataReliable error:&error];
在用户与其对等方连接后立即传输数据。但此行可用于在代码的其他位置发送数据,例如:
- (void)sendMessageToAllPeers:(NSString *)message {
[session sendData:[message dataUsingEncoding:NSUTF8StringEncoding] toPeers:session.connectedPeers withMode:MCSessionSendDataReliable error:&error];
}
- (void)sendMessage:(NSString *)message toPeerIDs:(NSArray *)peerIDs {
[session sendData:[message dataUsingEncoding:NSUTF8StringEncoding] toPeers:peerIDs withMode:MCSessionSendDataReliable error:&error];
}
最后,要开始/停止广告主和/或浏览器,您可以调用[\u serviceAdvertiser start/stopAdvertisingPeer]
,[\u nearbyservice browser start/stopBrowsingForPeers]
:
- (void)start {
[serviceAdvertiser startAdvertisingPeer];
[nearbyServiceBrowser startBrowsingForPeers];
}
- (void)stop {
[serviceAdvertiser stopAdvertisingPeer];
[nearbyServiceBrowser stopBrowsingForPeers];
}
还有其他方法,但这些是基础。不过写出来很快,所以任何人都可以随意修改 Use MCSession:@user523234 GKSession已因iOS7Wow而被弃用。我不知道这篇文章有多长时间了……很抱歉占据了这么多的屏幕:PThanks这么多@Lydsey Scott。。。你的深入了解和见解为我节省了很多时间。非常感谢!