zoukankan      html  css  js  c++  java
  • iOS 蓝牙的GameKit用法

    一、连接蓝牙

    • 显示可以连接的蓝牙设备列表
    - (IBAction)buildConnect:(id)sender {
        // 创建弹窗
        GKPeerPickerController *ppc = [[GKPeerPickerController alloc] init];
        // 设置代理  @interface ViewController () <GKPeerPickerControllerDelegate>
        ppc.delegate = self;
        // 展示
        [ppc show];
    }
    
    • 监听蓝牙的连接
    #pragma mark -GKPeerPickerControllerDelegate
    // 连接成功就会调用
    - (void)peerPickerController:(GKPeerPickerController *)picker // 弹窗
                  didConnectPeer:(NSString *)peerID // 连接到的蓝牙设备号
                       toSession:(GKSession *)session // 连接会话(通过它进行数据交互)
    {
        NSLog(@"%s, line = %d", __FUNCTION__, __LINE__);
        // 弹窗消失
        [picker dismiss];
    }
    

    二、利用蓝牙传输数据

    • 点击发送数据完成图片显示到另一个蓝牙机器上
      • 1.分析需要通过GKSession对象来传递数据,所以在peerPickerController:didConnectPeer:didConnectPeer:的方法中保存session会话
    @property (nonatomic, strong) GKSession *session; /**< 蓝牙连接会话 */
    
    // 连接成功就会调用
    - (void)peerPickerController:(GKPeerPickerController *)picker // 弹窗
                  didConnectPeer:(NSString *)peerID // 连接到的蓝牙设备号
                       toSession:(GKSession *)session // 连接会话(通过它进行数据交互)
    {
        NSLog(@"%s, line = %d", __FUNCTION__, __LINE__);
        // 弹窗消失
        [picker dismiss];
        // 保存会话
        self.session = session;
    }
    
    • 发送
    // 发送数据
    - (IBAction)sendData:(id)sender {
        if (self.imageView.image == nil) return; // 有图片才继续执行
        // 通过蓝牙链接会话发送数据到所有设备
        [self.session sendDataToAllPeers:UIImagePNGRepresentation(self.imageView.image) // 数据
                            withDataMode:GKSendDataReliable // 枚举:发完为止
                                   error:nil];
    
    }
    
    • 接收
    // 连接成功就会调用
    - (void)peerPickerController:(GKPeerPickerController *)picker // 弹窗
                  didConnectPeer:(NSString *)peerID // 连接到的蓝牙设备号
                       toSession:(GKSession *)session // 连接会话(通过它进行数据交互)
    {
        NSLog(@"%s, line = %d", __FUNCTION__, __LINE__);
        // 弹窗消失
        [picker dismiss];
        // 保存会话
        self.session = session;
        // 处理接收到的数据[蓝牙设备接收到数据时,就会调用 [self receiveData:fromPeer:inSession:context:]]
        // 设置数据接受者为:self
        [self.session setDataReceiveHandler:self
                           withContext:nil];
    }
    #pragma mark - 蓝牙设备接收到数据时,就会调用
    - (void)receiveData:(NSData *)data // 数据
               fromPeer:(NSString *)peer // 来自哪个设备
              inSession:(GKSession *)session // 连接会话
                context:(void *)context
    {
        NSLog(@"%s, line = %d", __FUNCTION__, __LINE__);
        // 显示
        self.imageView.image = [UIImage imageWithData:data];
        // 写入相册
        UIImageWriteToSavedPhotosAlbum(self.imageView.image, nil, nil, nil);
    }
    
    
    

    三、注意

    • 只能用于iOS设备之间的链接
    • 只能用于同一个应用程序之间的连接
    • 最好别利用蓝牙发送比较大的数据
  • 相关阅读:
    jira启动错误解决:Failed to read artifact descriptor for com.atlassian.plugins.rest:atlassian-rest-doclet:jar:2.9.2:
    jira8.0 api变化--含解决方法
    jira spring scanner注意事項
    pom文件添加aliyun镜像
    jira插件打包时报osgi的错误
    jira 根据项目(project)获取优先级(proirity)
    scriptrunner fragments设置web resource的路径
    Ubuntu16.04 LTS上安装Go1.10
    ubuntu 常见错误--Could not get lock /var/lib/dpkg/lock 问题修改
    VS2015编译OpenSSL
  • 原文地址:https://www.cnblogs.com/ShaoYinling/p/5049760.html
Copyright © 2011-2022 走看看