问题标签 [external-accessory]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
3240 浏览

ios - EASession 泄漏

我有一个连接到附件的应用程序,当您断开附件时,我创建的用于与附件通信的 EASession 泄漏。

当配件连接时,我会收到通知并检查 EAAccessoryManager 的配件集合,以查找具有特定名称且使用特定协议的配件。当我找到这个时,我使用代码为该附件创建一个 EASession 对象:

通常我将 alloc 和 init 放在一行上,但我发现(像这样将它分开)是 alloc 提供 +1 保留计数(如您所料)但是iniWithAccessory:forProtocol:我给它 +3 保留计数只会期望 init 方法中的 +2 retainCount。

泄漏工具似乎也支持这一点:

在此处输入图像描述

一步一步看泄漏仪器:

  1. +1 保留计数 :: [???Accessory openSession]- 这是我分配新 EASession 的地方。
  2. +1 保留计数 ::[EAInputStream iniWithAccessory:forSession:]输入流保留对拥有会话的引用。
  3. +1 保留计数 ::[EAOutputStream initWithAccessory:forSession:]输出流保留对拥有会话的引用。
  4. +1 保留计数 ::[EASession iniWithAccessory:forProtocol:] 我不知道为什么这会增加 EASession 的保留计数。我相信这是造成我无法解释的额外保留计数的原因......不确定这应该如何平衡。这是Apple的错误吗?我需要release额外的时间来平衡事情……非常非常奇怪。
  5. -1 保留计数 ::[EAInputStream close] 清理上面的步骤 #2
  6. -1 保留计数 ::[EAOutputStream close] 清理上面的第 3 步
  7. -1 保留计数 ::???Accessory closeSession]清理上面的步骤 #11

那么...为什么我要泄漏 EASession 对象?使用 EASession 对象不泄漏的正确方法是什么?


编辑 - EADemo 不会泄漏,但...

EADemo连接到配件,但不会泄漏。出于好奇,我添加了一个额外[_session retain]的内容以使其泄漏,以便我可以在仪器中跟踪它的 malloc 历史。有趣的是,我的应用程序的 malloc 历史记录中没有调用一些内部调用。

在此处输入图像描述

你可以看到这已经[EAAccessoryInternal removeSession:]调用了 3 次。这在我的应用程序的 malloc 历史中从未被调用过。我认为这是为什么我的 EASession 没有被释放的关键......

0 投票
1 回答
372 浏览

iphone - 来自外部设备的意外输入 - iOS

我将 iPod Touch(4G,越狱,iOS 5.0)连接到扩展坞(为 iPod 制造),通过扩展坞连接器(很可能使用 Apple 附件协议)向 iPod 发送命令,例如开始和停止播放。由于 iPod 已越狱,当我通过 ssh 连接到 iPod 时,我可以看到输入的命令,如下所示(这里反复按下扩展坞上的播放/暂停按钮,每行相当于按下一个按钮):

我不明白为什么这里的输入总是不同的。当我按下同一个按钮时,我希望每一行输入都是相同的(显然忽略了开头的偏移标记)。否则,播放/暂停按钮将按预期工作(当此od命令未运行时)。

所以我的问题是:有没有更好的调用方式od或我可以使用的其他实用程序,以便我能够正确查看请求?还是我需要更改波特率或类似的东西?

编辑:每隔一段时间就会显示两行输入,而不是只显示一个按钮。这可能是对齐/缓冲问题吗?

0 投票
1 回答
1022 浏览

ios - 修改 Apple 的 EADemo 项目以显示字节

我试图了解 EADemo 的工作原理以及外部附件框架的工作原理。EADemo 可在此处获得:

我要做的就是修改 Apple 的 EADemo 项目以显示它接收到的字节(假设它们是 ASCII 类型的字符),而不是仅仅计算它接收到的字节数。所以我改变了 EASessionTransferViewController.m...从:

至...

但这根本行不通。上次我试了,什么都没有。它连接到一个蓝牙板,该板只是回显接收到的 ASCII 字符或字符串。

有人可以帮忙吗?

0 投票
2 回答
483 浏览

ios - 适用于 iOS 的 ExternalAcessory 框架:将 iphone 用作 USB 设备

我正在研究 iOS sdk 以获取 ExternalAccessory 框架的示例,以使用 iphone/ipad 作为 USB 设备,可以插入 PC 或 Mac 并作为外部设备(如 midi 控制器或其他设备)

我要创建的应用程序需要通过 USB 或蓝牙连接到 iphone 主机(PC 或 Mac),并向主机提供功能。我该如何实施?

0 投票
1 回答
493 浏览

iphone - 以编程方式检查外部附件是否位于 30 针底座连接器中?

我找到了有关如何检查 iPhone 是否正在充电以及它处于什么水平的答案。但是,如果只是检查坞站连接器是否被任何外部附件(包括充电器)或其他任何可能的东西用完呢?我在 UIDevice 类参考中找不到任何方法。

0 投票
2 回答
3969 浏览

plist - xcode 中的“支持的外部附件协议”和 info.plist

我通读了 Apple 的 EADemo 项目。然后我尝试了自己的。但是当我自己制作时,没有地方放置支持的协议字符串。在 Apple 的 EADemo 项目中,如果你查看项目信息或 plist,有一个地方叫“支持的外部附件协议”。

如何让该字段出现在我的项目中?

谢谢!

0 投票
1 回答
1294 浏览

objective-c - 将数据作为原始数据读取和写入流?

我通过外部附件框架打开了以下输入和输出流:

现在我有一个非常愚蠢的问题,就像我的大多数新手问题一样。如何将原始的 1 字节数据发送到流中?说,我想发送 0x06。我怎么做?

然后......我如何从流中读取数据?我将被发送回数据以逐字节处理......字节将是字节范围(0x00 - 0xFF)内的数字。

感谢您的耐心和帮助!

0 投票
1 回答
291 浏览

objective-c - 更多输出流问题...原始数据和奇数输出。我做错什么了?

我使用 Apple 的 External Accessory Framework 打开了以下输入和输出蓝牙流:

我是这样写的:

我是这样读的:

我应该从设备“AA4”接收回来,因为它向我发送了两个字母字符,后跟在最后一个流事件中发送给它的 3 个字节。设备上的液晶屏报告它收到了一个 2 一个 4 和一个 6。它报告它发送了一个 A 和 A 和一个 4。但是 "NSLog(@"readBuf: %s", readBuf); " 总是打印:

有人对我做错了什么有任何想法吗?

谢谢!

0 投票
1 回答
1972 浏览

ios - 转贴:iOS修改iPhone连接外部配件时App自动启动

我早些时候曾问过这个问题,但由于细节不清楚或不充分而被关闭。希望我已经解释得更好。就这样吧。

我正在构建一个使用专有协议(通过 iAP)与外部附件通信的 iOS 应用程序。我知道通过在 info.plist 文件中添加唯一的协议名称,可以使应用程序在 iOS 设备连接到外部附件时自动启动(我知道外部附件设备也需要支持)。

能够与外部附件通信的应用程序应在其 Info.plist 文件中声明它们支持的 ?protocols。声明对特定协议的支持让系统知道您的应用程序可以在连接该附件时启动。如果没有应用程序支持连接的附件,系统可能会选择启动 App Store 并指出支持的应用程序。

在我的应用程序中,我希望给用户一个图形界面来启用或禁用自动启动应用程序。在幕后,这需要将协议名称设置为预定义的值以启用它或清除它以禁用它。

如果有人能给我有关如何以编程方式修改协议 ID 的信息,我将不胜感激。

0 投票
2 回答
441 浏览

objective-c - Objective C - 将 EAAccessory 存储到 NSUserDefaults

在我必须制作的项目中,我正在使用外部附件和框架 ExternalAccessory。

(我只能连接一个附件)。

连接很容易,发送数据并不难。

我想做的一件事是将最后连接的设备存储在内存中,以在应用程序重新启动时尝试自动重新连接。(离开之后,所以在第一次发射之后。)

所以,我的问题是 EAAccessory 是一个自定义类对象,不能存储到 NSUserDefaults 中。

我看到这个问题来存储自定义对象:

如何在 NSUserDefaults 中存储自定义对象

所以我会用它创建一个 NSData ,但没有成功,因为 EAAccessory 没有实现 encodeWithCoder 和 initWithCoder 方法......

任何想法 ?对于这种方式或另一种方式来处理?