使用 iOS 外部附件协议在外部附件上支持多个应用程序

Posted

技术标签:

【中文标题】使用 iOS 外部附件协议在外部附件上支持多个应用程序【英文标题】:Multiple App Support on external accessory using iOS external accessory protocol 【发布时间】:2015-12-29 17:07:09 【问题描述】:

我们正在开发一个 MFi 外部附件,我们可以在该附件上使用外部附件协议从 iPhone 启动 ios 应用程序。我们正在使用福特 Smartdevicelink 协议来注册应用程序。我们使用 USB 作为配件和 iPhone 之间的通信媒介。目前,我们能够在配件上启动一个应用程序。我们想同时启动多个应用程序。但我们在这里感到震惊。请提供一些关于我们如何做到这一点的意见。一个

我们面临的问题是,如果一个应用程序已经在附件和 iPhone 中启动,如果我们在 iPhone 中启动另一个应用程序而前一个应用程序在后台,附件会收到后台应用程序的“StopExternalAccessoryProtocolSession”。因此,后台应用程序变得无法运行,因此一次只有一个应用程序可以运行。对于启动的新应用,我们会收到“StartExternalAccessoryProtocolSession”,并且它会起作用。

此外,我们为所有应用使用一个协议标识符。我们应该为所有应用程序使用不同的协议来支持多个应用程序吗?或者如果我们可以使用单个协议标识符来实现这一点,请提供有关我们如何实现这一点的输入。?

【问题讨论】:

【参考方案1】:

我是 SDL-iOS 的维护者。

对于 SDL,我们解决它的方法是允许使用多达 30 个协议字符串。该应用程序将查找com.smartdevicelink.prot0 流并连接。它将从要连接的数据协议的附件接收单个字节的数据0x01 - 0x1E

This is a list of the SDL Protocol Strings.

EDITED 修正错误陈述。

【讨论】:

在应用端,我们启用了您上面提到的所有协议。配件端需要做什么?我也在配件端启用了所有协议,但仍然无法启动多个应用程序。 看看 sdl_ios 项目的 SDLIAPTransport 类。应用程序将首先尝试连接到控制协议 com.smartdevicelink.prot0。它需要接收一个字节的数据,告诉它要切换到哪个数据协议(com.smartdevicelink.prot1 - 30)。如果您需要更多帮助,可以从 github 存储库链接到 slack。【参考方案2】:

外部附件有一个只能读取一次的数据流。 对于类似的问题,我实现了一个套接字服务器,它可以通过 tcp 或 udp 发送从附件读取的数据,所以我只是有一个主应用程序与外部附件通信并充当其他应用程序的代理(我正在谈论的应用程序是 NMEA Gps,并允许其他应用从双电子设备连接到外部 Gps)

【讨论】:

你提到的方法已经为android做了。但是iOS,我们做不到。您是否为 iOS 或 android 实现了代理应用程序? iOS,应用是这样的:itunes.apple.com/it/app/nmea-gps/id590868529?mt=8

以上是关于使用 iOS 外部附件协议在外部附件上支持多个应用程序的主要内容,如果未能解决你的问题,请参考以下文章

外部附件命令协议

如何使用外部附件设备在设备上播放音乐?

iOS:访问4.0以下的OlderBluetoothDevice

iOS 外部附件框架:如何获取特定 MFI 设备的协议字符串

App Store 的外部附件协议

iOS 外部附件框架附件DidConnect 未触发