蓝牙项目实现

蓝牙项目实现
2012年01月17日
   蓝牙联机总结
  连接的相关数据传送,需要从两个(或两个以上的)角度来进行设计和思考服务端和客户端(或者称为接收数据端和发送端来思考更合适,虽然两端都包含数据接收和发送两种思想,但设计的时候分开想好了再来写容易些),不管是蓝牙联还是通过网络服务器实现多人联,程序的构架思想是一样的。
  (Apple api)
  GKPeerPickerController 类(说明)
  继承自 NSObject 类(在Frameworks中添加GameKit)
  在3.0b以后版本中有效
  在GKPeerPickerController.h中定义
  参考指南:GameKit 编程指南
  参考代码例子:GKTank
  概要:
  GKPeerPickerController类给用户提供一个标准接口,该接口允许用户的iPhone发现并连接上另外一个iPhone。结果是配置两个连接设备的GKSession object。使用GKPeerPickerController object后,你的程序生成一个控制器,增加一个delegate,配置允许连接的类型,然后显示picker。当用户选择连接一个picker的时候,代理会自动调用。
  在iPhone os 3.0中,peer picker能够配置选择类型,在蓝牙和网络连接之间选择。
  注意:虽然用户能够在peer picker里选择网络连接,GKPeerPickerController不会提供用户接口来设置他们。如果你的app设置peer picker允许网络连接,你的app必须(dismiss)去掉peer picker的点连接功能,而且这个时候它配置成网络连接。
  if(Type=GKPeerPickerConnectiionTypeNearby)采用此语句会直接选择蓝牙模式,
  if(Type=GKPeerPickerConnectionTypeOnline)采用此语句iphone会调用wifi功能
  如果使用online类型则可以用手机和电脑进行联机程序测试!
  picker初始化后,可以设定连接类型
  picker.connectionTypesMask =GKPeerPickerConnectionTypeNearby|
  GKPeerPickerConnectionTypeOnline;
  [picker show];
  相关任务
  设置和获得代理
  delegate属性
  peer picker controller的代理
  GKPeerPickerController类
  显示picker对话框
  -show(给用户显示picker对话框)
  -dismiss(隐藏peer picker对话框)
  visible属性(一个bool值,表明是否显示有visible对话框)
  设置连接选项
  一个mask决定当前连接类型,这个mask显示给用户
  属性
  connectionTypesMask
  一个mask显示当前连接的对话框,用户能看到
  @property(nonatomis,assign) GKPeerPickerConnectType connectionTypesMask
  注意: 你的app允许在显示peer picker之前设置连接。如果你允许超过一个以上的连接类型,peer picker提供用户选择一个连接。默认连接是GKPeerPickerConnectionTypeNearby
  在3.0中,GKPeerPickerConnectionTypeNearby是允许连接的类型中的一个。
  在GKPeerPickerController.h文件中定义
  delegate
  @property(nonatomic,assign) iddelegate
  该delegate必须适合GKPeerPickerControllerDelegate格式协议
  visible
  是一个boolean值(只读属性)
  @property(readonly, getter=isVisible) BOOL visible
  在GKPeerPickerController.h文件中定义
  实例方法
  dismiss
  隐藏peer picker 对话框
  -(void)dismiss
  Declared In
  GKPeerPickerController.h
  show给用户显示picker对话框
  官方相关代码
  GKTank
  constants
  GKPeerPickerConnectionType
  enum{
  GKPeerPickerConnectionTypeOnline = 1 :error:
  -denyConnectionFrompeer:
  连接点的数据传送相关
  -setDataReceiveHandler:withContext:
  -sendData:toPeers:withDataMode:error:
  -sendDataToAllPeers:withDataMode:error:
  disconnectTimeout
  关于session的信息
  displayName
  peerID
  sessionID
  sessionMode
  peerID只读属性
  @property(readonly)NSString *peerID
  sessionID
  @property(readonly)NSString *sessionID
  sessionMode
  @property(readonly)GKSessionMode sessionMode acceptConnectionFromPeer:error: -(BOOL)acceptConnectionFromPeer:(NSString*)peerID error:(NSError*)error
  参数peerID
  error
  返回Yes,or NO
  cancelConnectToPeer:
  -(void)cancelConnectToPeer:(NSString*)peerID
  initWithSessionID:displayName:sessionMode:
  Initializesandreturnsanewlyallocatedsession.
  - (id)initWithSessionID:(NSString *)sessionIDdisplayName:(NSString *)name
  sessionMode:(GKSessionMode)mode
  peersWithConnectionState:
  Returnsalistofpeersinthespecifiedconnectionstate.
  - (NSArray *)peersWithConnectionState:(GKPeerConnectionState) state
  sendData:toPeers:withDataMode:error:
  Transmitsacollectionofbytestoalistofconnectedpeers .
  - (BOOL)sendData:(NSData *)datatoPeers:(NSArray *)peers
  withDataMode:(GKSendDataMode)modeerror:(NSError **)error
  参数:
  data
  发送的字节
  peers
  An array of NSString objects identifying the peers that should receive the data.
  一个NSString数组确认应该接受数据的点
  mode
  用来发送数据的方法
  - (void) receiveData:(NSData *)data fromPeer:(NSString *)peer inSession:
  (GKSession *)session context:(void *)context;
  typedef enum {
  GKSendDataReliable,
  GKSendDataUnreliable,
  } GKSendDataMode;GKSessionClassReference
  SessionModes
  Modesthatdeterminehowasessioninteractswithotherpee rs.
  typedef enum {
  GKSessionModeServer,
  GKSessionModeClient,
  GKSessionModePeer,
  } GKSessionMode;
  ConnectionStates
  typedef enum {
  GKPeerStateAvailable,
  GKPeerStateUnavailable,
  GKPeerStateConnected,
  GKPeerStateDisconnected,
  GKPeerStateConnecting } GKPeerConnectionState; GKSessionClassReference - (void)peerPickerController:(GKPeerPickerController *)picker didSelectConnectionType:(GKPeerPickerConnectionTyp e)type { if(type == GKPeerPickerConnectionTypeOnline) { [picker dismiss]; [picker autorelease]; // Display your own user interface here. } 蓝牙联机涉及到的8个方法:
  1,show picker
  // show the Peer Picker
  -(void)startPicker
  2,//user did cancel
  - (void)peerPickerControllerDidCancel:(GKPeerPickerController *)picker
  3,//Provide session id
  - (GKSession *)peerPickerController:(GKPeerPickerController *)picker sessionForConnectionType:(GKPeerPickerConnectionType)type {
  GKSession *session = [[GKSession alloc] initWithSessionID:kTankSessionID displayName:nilsessionMode:GKSessionModePeer];
  return [session autorelease]; // peer picker retains a reference, so autorelease ours so we don't leak.
  }
  4,// dismiss the picker
  - (void)peerPickerController:(GKPeerPickerController *)picker didConnectPeer:(NSString *)peerID toSession:(GKSession *)session {
  5,// invalidate session
  - (void)invalidateSession:(GKSession *)session {
  6,//receive data
  - (void)receiveData:(NSData *)data fromPeer:(NSString *)peer inSession:(GKSession *)session context:(void*)context {
  }
  7,//send packet
  - (void)sendNetworkPacket:(GKSession *)session packetID:(int)packetID withData:(void *)data ofLength:(int)length reliable:(BOOL)howtosend {
  8,// we've gotten a state change in the session
  - (void)session:(GKSession *)session peer:(NSString *)peerID didChangeState:(GKPeerConnectionState)state {
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值