MFi App端开发步骤
来源:互联网 发布:dj制作软件中文版 编辑:程序博客网 时间:2024/04/27 18:49
与附件设备通讯的App需设备支持的协议,这些协议由设备制造商维护,可是自定义或标准协议,标准协议可与其他设备通信,iOS不负责这些协议的维护。
为防止命名空间冲突,推荐使用反DNS形式命名协议,如com.apple.myProtocol
、com.dji.video
、com.dji.protocol
、com.dji.common
。
1、编程步骤
1.1、引入框架与头文件
外部附件框架(ExternalAccessory.framework)为App与附件设备通信提供了桥梁。因此,在Xcode项目中,需要为每个与附件设备通信相关的项目添加ExternalAccessory.framework。
下一步是引入头文件#import <ExternalAccessory/ExternalAccessory.h>
。
1.2、声明App支持的协议
不声明协议直接调用EA框架的类会崩溃。
使用UISupportedExternalAccessoryProtocols
键在Info.plist中声明支持的协议,值为数组,数组的元素为支持的协议,元素的顺序任意且不限数量。这些值只用于判断App与附件设备的通信能力。当App与设备通信时,具体通信协议由我们编程决定。
当附件设备插入iOS设备时,系统才知道App可被新插入的设备启动。若当前已安装的App都没注册协议,则系统可能到App Store去搜索支持新设备声明的协议的App。
UISupportedExternalAccessoryProtocols
对应的值虽说可参考UISupportedExternalAccessoryProtocols,实际此链接并没给出有帮助的信息,《MFi Accessory Interface Specification for Apple Devices》也没给出所谓标准协议的字符串值。
1.3、开始通信
创建
EASession
。此对象管理与附件设备交互的情况,它与底层系统工作,在设备上来回传输数据。一旦会话建立,数据通过NSInputStream
和NSOutputStream
的实例在App中传输。收发的数据包的格式由与附件设备通信的协议决定。接收数据。使用自定义委托对象,监视
NSInputStream
实例可从附件设备接收数据。发送数据。向
NSOutputStream
写入数据包即可发送至附件设备。
1.4、一个读取外接设备的示例
1、Info.plist中加入Supported external accessory protocols
,值为com.apple.p1
。这个只是令系统认为我们的应用有能力与外接设备沟通,这里使用Lightning USB Camera Adapter测试。
2、读取外接设备信息代码
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ NSMutableString *info = [[NSMutableString alloc] initWithCapacity:1024]; EAAccessoryManager *manager = [EAAccessoryManager sharedAccessoryManager]; NSArray<EAAccessory *> *accessArr = [manager connectedAccessories]; for (EAAccessory *access in accessArr) { for (NSString *proStr in access.protocolStrings) { [info appendFormat:@"protocolString = %@\n", proStr]; } [info appendFormat:@"\n"]; [info appendFormat:@"manufacturer = %@\n", access.manufacturer]; [info appendFormat:@"name = %@\n", access.name]; [info appendFormat:@"modelNumber = %@\n", access.modelNumber]; [info appendFormat:@"serialNumber = %@\n", access.serialNumber]; [info appendFormat:@"firmwareRevision = %@\n", access.firmwareRevision]; [info appendFormat:@"hardwareRevision = %@\n", access.hardwareRevision]; [info appendFormat:@"dockType = %@\n", access.dockType]; } dispatch_async(dispatch_get_main_queue(), ^{ label.text = info; });});
运行结果为:
manufacturer = Applename = Apple USB Camera AdaptermodelNumber = A1440serialNumber = firmwareRevision = 1.0.0hardwareRevision = 1.0.0dockType = (null)
1.5、与外接设备交互数据的示例
如下代码展示与DXO One相机通信。
1、在非UI线程中打开设备,否则可能导致程序崩溃。
EAAccessoryManager *manager = [EAAccessoryManager sharedAccessoryManager];NSArray<EAAccessory *> *accessArr = [manager connectedAccessories];if (accessArr.first) { EASession *session = [[EASession alloc] initWithAccessory:accessArr.firstObject forProtocol:@"com.dxo.one.protocol"]; if (!session) return; NSInputStream *inputStream = [session inputStream]; if (!inputStream) { // LOG inputStream = null } inputStream.delegate = self; [inputStream open];}
2、实现NSStreamDelegate
协议
- (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode { // LOG stream & event code switch (eventCode) { case NSStreamEventNone: break; case NSStreamEventOpenCompleted: // 开始读取 break; case NSStreamEventHasBytesAvailable: // 获取可读数据大小,读取流才有效。 break; case NSStreamEventHasSpaceAvailable: // 获取可写空间大小,写入流才有效。 break; case NSStreamEventErrorOccurred: // 出错处理 break; case NSStreamEventEndEncountered: // 读取结束 break; }}
2、ExternalAccessory框架
1、EAAccessory
提供一个已连接的设备的信息,如制造商,固件版本等。
2、EAAccessoryManager
协调MFi设备与iOS设备之间的工作。
3、EASession
用来创建App与附件设备之间的通信通道。
4、EAWiFiUnconfiguredAccessory
提供未配置的MFI Wireless Accessory Configuration设备的信息给App。
5、EAWiFiUnconfiguredAccessoryBrowser
让App访问MFi Wireless Accessory Configuration进程。
3、开发技巧
Lightning接了设备则不能连接计算机,所以直观的做法是,将日志用UITextView显示出来。写成日志就得每次都拔掉设备,插上电脑,如此反复。
另一个办法是,通过蓝牙测试传输协议,手机连接电脑,可单步调试。验证完再用Lightning连接设备联调。
作者:熊皮皮
链接:http://www.jianshu.com/p/8f69c9c4e71e
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
- MFi App端开发步骤
- iOS MFi App端开发步骤
- iOS开发-App上架的MFi问题解决
- MFi开发相关
- ios app开发步骤
- APP开发步骤
- 移动app开发流程,app开发步骤
- Android App widget 开发步骤
- day01-app的开发步骤
- 混合式开发App步骤详解
- Android app项目开发步骤总结
- Android app项目开发步骤总结
- 转:Android app项目开发步骤总结
- Android app项目开发步骤总结
- Android app项目开发步骤总结
- Android app项目开发步骤总结
- thinkphp 开发 App 接口的方法步骤
- thinkphp 开发 App 接口的方法步骤
- 深入理解Redis(三)—多机数据库
- 关于js中处理时间戳和图片预加载的问题自动提交
- MySQL的客户端、服务器的连接协议
- iOS开发之App开发团队必须知道的 iOS 11 更新点几iPhoneX的屏幕适配
- 《现代密码学》第二章——完善保密加密
- MFi App端开发步骤
- c++中sort和qsort的比较
- 《函数指针的理解》
- 【Java集合类】TreeMap解析
- 堆内存和堆外内存
- 试用人员转正通知函
- Jons处理工具类JsonKit
- Android Studio将类文件保存为模板
- Java:switch参数