如何在 iOS 6.1 上正确设置 GKSession(蓝牙)

2024-03-29

我在让 GKSession 工作时遇到问题。下面是我的代码,当按下特定按钮时执行。

GKSession *session;
if (connectButtonHasBeenPressed == false) {
    NSLog(@"connectToBluetoothDevice has been called");
    connectButtonHasBeenPressed = true;
    GKSession *session = [[GKSession alloc] initWithSessionID:@"Unicorn" displayName:nil sessionMode:GKSessionModePeer];
    [session setDataReceiveHandler:self withContext:nil];
    [session setDelegate:self];
    [session setAvailable:YES];
    NSLog(@"Session ID: %@", [session sessionID]);
    NSLog(@"Currently Available Peers: %i", [[session peersWithConnectionState:GKPeerStateAvailable] count]);
    if ([session isAvailable]) {
        NSLog(@"The Session Is Available");
    }
    [connectToDeviceButton setTitle:@"Searching..." forState:UIControlStateNormal];

}
else {
    NSLog(@"Currently Available Peers: %i", [[session peersWithConnectionState:GKPeerStateAvailable] count]);
}

第一次按下按钮后,一切似乎都工作正常。此后每次我按下按钮,它都会打印“当前可用的对等点:0”。如果我没有两个设备并排放置,并在按下按钮的情况下运行程序,这将是预期的输出。我还在此类中实现了所有 GKSessionDelegate 方法,这些方法都将消息记录到控制台。这些方法都没有运行过。所有这些都表明这些设备无法找到彼此。

但是,我已经运行了示例程序 GKRocket,它使用 GKSession 连接两个设备,并且它在这两个设备之间运行良好。我将 GKRocket 的代码与我的程序的代码进行了比较,没有发现任何我认为可能影响 GKSession 的差异。

有什么建议么?


您似乎有两个 GKSession 实例。一个在外面,另一个在里面if陈述。

这意味着如果connectButtonHasBeenPressed is false它将创建它自己保留的 GKSession 版本。但如果是true then session将等于nil.

我还建议使用nil作为会话 ID,然后使用捆绑包 ID 为您设置它。尽管这可能是个人喜好。

尝试使用这样的东西:

if (session == nil)
{
    NSLog(@"connectToBluetoothDevice has been called");
    session = [[GKSession alloc] initWithSessionID:nil displayName:nil sessionMode:GKSessionModePeer];
    [session setDataReceiveHandler:self withContext:nil];
    [session setDelegate:self];
    [session setAvailable:YES];

    NSLog(@"Session ID: %@", [session sessionID]);
    if ([session isAvailable])
    {
        NSLog(@"The Session Is Available");
    }
    [connectToDeviceButton setTitle:@"Searching..." forState:UIControlStateNormal];

    connectButtonHasBeenPressed = true;
}

NSLog(@"Currently Available Peers: %i", [[session peersWithConnectionState:GKPeerStateAvailable] count]);

你真的不需要有一个connectButtonHasBeenPressed变量,因为您可以检查 GKSession 是否等于 nil,如果没有连接,它应该始终等于 nil。当您的会话结束时,您应该始终取消所有会话操作并设置session = nil;.

The session变量实际上应该在您的 .h 文件中声明,以便您可以在整个类中使用它。以便GKSession *session;不再需要。

Note:只是您的一张便条connectToBluetoothDevice has been called日志。根据我的经验,GKSession 将使用 WiFi 或蓝牙,具体取决于可用的情况。如此之多,以至于您可以拥有 3 台设备,其中 1 台仅开启蓝牙,1 台仅开启 WiFi,最后一台同时开启,它们都可以完美地相互连接和通话。

希望这可以帮助。

Edit:删除了不需要的connectButtonHasBeenPressed来自示例代码的变量并添加了更多解释。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 iOS 6.1 上正确设置 GKSession(蓝牙) 的相关文章

  • BUG - 在 IOS 中没有选择标签的完成按钮

    我正在使用最新的离子并有一个简单的选择标签
  • 将 UITableViewDataSource 与具有子视图的自定义单元格结合使用

    在 UITableView 中使用自定义单元格时 我遇到了奇怪的表格重叠 Problem 向下滚动 最后两行上面画有顶部两行 向上滚动 前两行上面画有下面两行 这是 UITableViewDataSource 的代码 func tableV
  • Swift - 本地通知不会被触发

    我正在 Swift 3 中编码 我只是想发送通知now没有任何延迟或间隔 然而 通知永远不会被触发 这是我的代码 视图控制器代码 import UserNotifications class HomeViewController UIVie
  • tableView.dequeueReusableCellWithIdentifier() 导致应用程序挂起

    原帖 我们最近将我们的应用程序转换为 Swift 2 0 和 iOS9 我看到的一个奇怪的问题是调用 tableView dequeueReusableCellWithIdentifier 会导致应用程序挂在模拟器中 The code fu
  • iOS 中如何清除特定域的 cookie?

    我已经搜索了 StackOverflow 上的几乎所有问题来寻找我的问题的答案 我还没有找到任何有用的链接或教程来说明哪种方式最好清除特定域的 cookie 如果有人可以帮助我 请 我自己找到了解决方案 如果您想删除 UIWebView 中
  • 如何在 iOS 中查找蓝牙音频设备

    好的 我正在开发一个有趣的项目 该项目有一个障碍 我需要为我的 iOS 应用程序启用蓝牙音频支持 我遇到的障碍是我什至无法开始获取已连接的蓝牙音频设备的列表 即使我的 iPhone 5S 可以识别我的耳机 大约 3 4 岁的耳机 LG HB
  • 如何将导航栏大标题转换为多行,居中对齐

    我正在尝试设计具有多行居中大标题文本的视图控制器 就像苹果的 Ask Siri Settings gt General gt Keyboards gt About Ask Siri Dictation and Privacy 我可以使用以下
  • 是否可以使“HTML 到语音”与“文本到语音”相同?

    我有一个奇怪的要求 在我现有的应用程序中我有Text2Speech为此 我使用了AVSpeechSynthesizer 到语音文本 但现在要求发生了变化 现在我需要将 HTML 文件数据转换为文本 例如HTML2Speech 我们可以想到的
  • 自定义字体显示在 IB 中,但不显示在模拟器中

    我已经设置了一个UITextView and a UILabel使用自定义字体 它是垂直镜像的蒙古文字体 但我还添加了英文文本 以便您可以看到效果 这些文字显示在 Interface Builder 中 但在模拟器中大部分字符都在UITex
  • iOS8 CoreData“使用未实现的初始化程序”

    我尝试运行我的应用程序时收到以下错误 致命错误 对类 rcresttest CatalogItem 使用未实现的初始化程序 init entity insertIntoManagedObjectContext 我可以通过将数据模型中的实体类
  • iPad 照片选择器崩溃

    我正在使用以下函数根据 UIActionSheet 的结果激活设备相机或图像选择器 如果 fromCamera YES 那么它适用于 iPhone 和 iPad 如果 fromCamera NO 那么它可以在 iPhone 上运行并出现图像
  • XMPPFramework - 如何创建多用户聊天室?

    我如何使用XMPPFramework在iPhone中实现GroupChat 我尝试了以下代码 但房间没有创建 我如何知道房间是否创建 XMPPRoomDelegate没有被调用 当Stream断开连接时 调用handleDidLeaveRo
  • 网站在 iPhone 屏幕右侧显示空白区域

    我遇到问题http eiglaw com http eiglaw com iPhone 屏幕右侧显示约 25 像素宽的空白 边框 我在 stackoverflow 上研究了这个问题 这些帖子是相关的 但是当我尝试提供的各种解决方案时 我无法
  • 如何知道我的应用程序使用了多少 iCloud 空间?

    有没有办法查看我的应用程序正在备份到 iCloud 的内容以及它消耗了多少内存 Settings gt iCloud gt Storage Backup gt Manage Storage将显示正在备份的总计内容 iOS 会备份位于应用程序
  • 带操作按钮的颤动本地通知

    我在我的 flutter 项目中尝试了 flutter 本地通知插件 它在简单通知上工作正常 但我需要带有操作按钮的通知功能 请帮助我或建议我实现此功能 不幸的是 flutter local notifications 插件尚不支持操作按钮
  • UIScrollView setZoomScale 将应用的旋转设置回零

    我已经从事地图替换工作很长一段时间了 整个事情的工作原理是UIScrollView由一个支持CATiledLayer 为了旋转我的地图 我旋转图层本身 使用CATransform3DMakeRotation 到目前为止效果很好 但如果我打电
  • 在 Xcode 5 中重命名 iOS 项目[重复]

    这个问题在这里已经有答案了 我需要重命名一个 iOS 项目 有没有办法在不开始一个全新项目的情况下做到这一点 我发现的所有其他信息都与 Xcode 4 或旧版本相关 这些方法似乎使项目崩溃 我在尝试任何名称更改之前创建了一个快照 在 Xco
  • UIButton的高亮状态由什么控制事件开始和结束

    我正在创建类似钢琴的视图UIButton作为钢琴键 什么UIControlEvents当按钮获得和失去突出显示状态时 我应该监听以获得回调吗 我试图创建子类UIButton并添加属性观察者highlighted并且运行良好 然而 有时我需要
  • 哪些 Flutter 插件或功能可以利用外部 iOS/Android 显示器来显示与主显示器不同的内容

    我正在构建一个跨平台应用程序 需要在外部显示器上显示不同的视图 通常通过连接到 LCD 投影仪的 HDMI 适配器电缆连接 Flutter 是否能够在内置的外部显示器上显示不同的屏幕 在现有的 Flutter 插件中还是使用现有的 Flut
  • 在 iOS 7 Safari 中,如何区分通过边缘滑动与后退/前进按钮的 popstate 事件?

    在 iOS 7 Safari 中 现在有两种后退 前进导航方式 使用底部的传统后退 前进按钮箭头或从屏幕边缘滑动 我正在使用动画在 ajax 应用程序中的页面之间进行转换 但如果用户通过边缘滑动进行导航 我不想触发该转换 因为这本身就是一个

随机推荐

  • 使导航控制器中的自定义后退按钮可点击区域更小

    我使用下面的代码创建了一个自定义后退按钮 但是可点击区域非常大 远远超出了图标本身 有谁知道如何设置可点击区域 或使其与图像大小相同 Thanks UIImage buttonImage UIImage imageNamed prefs U
  • Less 和 Bootstrap:如何使用 span3 (或 spanX [任意数字])类作为 mixin?

    是否可以添加span3类中的 mixin 以避免将其放入 HTML 中的每个元素中 就像是 myclass span3 other rules EDIT 抱歉 我忘记指定一个重要细节 span3是 Bootstrap 的标准类 我在Boot
  • HttpUrlConnection.getInputStream 在 Android 中返回空流

    我使用 HttpUrlConnection 向服务器发出 GET 请求 连接后 我收到响应代码 200 我收到回复消息 好的 我得到输入流 没有抛出异常 但是 在一个独立的程序中 我得到了响应的正文 如预期的那样 姓名 我的名字 生日 01
  • 将“observeEvent”输出传递给操作按钮

    我正在使用 R Shiny 会话中显示动态地图leaflet 我允许用户在一个区域周围绘制一个边界框 这会生成一个范围对象 我想将用户定义的边界框的结果传递给raster这将裁剪适当的区域 如边界框中所定义 并绘制输出 简而言之 结果是ob
  • 带有锚点 (#) 参数的 Django 重定向()

    我目前正在使用 Django 的 redirect 方法来构造要重定向到的 URL 我不想对 URL 进行硬编码 所以我一直这样做 return redirect main views home home slug slug 这让我想到了类
  • MATLAB 的“SIGMA 必须是对称且正定”错误有时没有意义

    我不确定这是一个编程问题还是统计问题 但我 99 确定应该存在一个数字问题 因此也许可以提出一个程序化的解决方案 我正在使用 MATLAB mvnpdf 函数来计算一些观测值的多元高斯 PDF 我经常收到 SIGMA 必须是对称且正定的 错
  • $_SERVER['QUERY_STRING'] 不按原样打印 unicode 值

    http localhost fw api fw api php rule unicode action create phrase 我访问上面的网址 在fw api php 当我回显 SERVER QUERY STRING 它没有给出 U
  • 使用 TensorFlow .pb 图作为 Keras 模型

    我使用内置 TensorFlow 工具来微调 InceptionV3 模型的最后一层 以便对自定义数据集上的项目进行分类本教程 https www tensorflow org tutorials image retraining 这会生成
  • 如何在不使用 API 的情况下向 Drupal 6.x 注册用户?

    我们必须有一个通过用 java 编写的 Web 服务可用的 注册 方法 因此从今往后我们无法访问 Drupal API 但我们需要能够成功注册用户 简单地将用户添加到用户表中是行不通的 因为新创建的用户永远无法成功登录 我再次喜欢 Drup
  • Apache 设置 000-default.conf 文件

    我确信这是一个简单的问题 我已经流浪了一台机器并设置了 LAMP IP 配置为 10 0 0 10 在我的 Windows 计算机中 我修改了主机文件并添加了一个名为 rsywx remote 的条目 从我的 Windows 机器到我的 v
  • R中的标准评估和非标准评估

    我对 dplyr 函数的参数感到困惑 并且不太清楚标准评估 SE 或非标准评估 NSE 我只想将变量传递给 dplyr arrange 但失败了 但是 传递给 dplyr select 是有效的 gt library dplyr gt li
  • width=device-width 在移动 IE 中不起作用

    我正在尝试制作一个在手机上运行良好的网站 到目前为止 我测试过的每部手机都运行良好 但装有 Windows Mobile IE 的手机除外 看来 Mobile IE 只是读取了并且没有将宽度设置为设备宽度 有人有这方面的经验或任何让网站在移
  • 使用 Django Rest Framework,如何上传文件并发送 JSON 有效负载?

    我正在尝试编写一个 Django Rest Framework API 处理程序 它可以接收文件以及 JSON 有效负载 我已将 MultiPartParser 设置为处理程序解析器 然而 我似乎无法两者兼得 如果我将有效负载与文件一起作为
  • Doxygen 注释的“使用命名空间”

    我的库的所有类都是在命名空间内定义的 当我为 Doxygen 创建主页时 我必须在注释中显式使用此命名空间以使 Doxygen 生成链接 我想对整个评论块使用类似 使用命名空间 的内容 一个例子 mainpage My Library Us
  • java.lang.IllegalStateException:getWritableDatabase 递归调用

    请帮我解决该错误 D AndroidRuntime 836 Shutting down VM W dalvikvm 836 threadid 1 thread exiting with uncaught exception group 0x
  • Vite - 静态文件不复制

    我有一个 Vue js 应用程序依赖于Vite https vitejs dev 在此应用程序中 我有两个静态文件需要复制到我的dist目录 favicon ico and manifest json My vite config js文件
  • Python MySQLdb 迭代表

    我有一个 SQL 数据库 我需要迭代表并在满足 WHERE 子句后执行操作 然后 一旦到达表的末尾 就返回到顶部并重新开始 目前我有 cursor database cursor cursor execute SELECT user id
  • 如何从特权容器访问docker主机文件系统

    不使用卷 v 我可以添加 privileged to docker run但我无法安装任意卷 因为我依赖另一个工具来创建 docker 容器 所以我的问题是如何完全访问 docker 主机文件系统 privileged true 够了吗 特
  • jQuery:如何检测元素是否未被单击?

    我想知道是否可以检测某个元素是否未被单击 这是我的代码 mpElement myFeature afterDo function This if else statement has to go inside when not clicke
  • 如何在 iOS 6.1 上正确设置 GKSession(蓝牙)

    我在让 GKSession 工作时遇到问题 下面是我的代码 当按下特定按钮时执行 GKSession session if connectButtonHasBeenPressed false NSLog connectToBluetooth