arn*_*app 11 audio avaudioplayer ios swift
作为一个小假期项目,我想通过可访问性开关来控制应用程序,该开关通过3,5mm耳机插孔连接到iOS设备.
我的问题是,当我按下按钮时,我不知道发出什么样的信号 - 我认为它的作用类似于耳机的遥控器.
有没有办法测量这个输入或有没有人知道如何在iOS上获得按钮的输入?
您的按钮是由AbleNet设计的"Big Buddy Button Switch",适用于中度至重度上肢和运动障碍的人士.它不是设计用于插入IOS设备,也不用于任何移动平板电脑或手机.
有一个"挂钩+开关"接口(此时为185美元),用于在此按钮和IOS设备之间切换,允许将两个这样的按钮连接到闪电连接器.以这种方式连接时,可以使用Apple辅助功能设置检测按钮按下并映射到许多不同类型的IOS操作.这是很多钱,但由于新的iphone甚至没有音频插孔,它可能最终值得.
这里有你的按钮的链接.
此处提供了到Hook + Switch接口的链接.
此处提供了有关辅助功能开关的Apple信息的链接.
Big Buddy Button是一个被动的瞬间动作开关.连接的单声道TS插头内部连接到瞬时动作常开开关,因此按下开关会将TIP短接至SLEEVE.
将此TS插头插入设计用于接收TRRS插头的ios设备即使未按下按钮也会将RING1 和 RING2 和 SLEEVE 短接在一起,这将无法实现任何有用的功能.按下按钮将进一步缩短TIP到RING1 和 RING2 和 SLEEVE.如果直接插入TS插头,则无法从ios内部读取这样的按钮.
如果你想破解一个适用于许多移动设备(例如,android)的解决方案,你可以简单地用TRRS插头替换TS插头(或连接适配器),如下所示:
两个大按钮导线中的一个应连接到SLEEVE,SLEEVE承载电源(用于麦克风),并且是内部感测电压变化和切换的电压源.另一个Big Button导线应连接到RING2,这是耳塞通道和麦克风的接地线.什么都不应该连接到TIP或RING1.
按下大按钮会暂时将Sleeve短接到Ring2,这与按下耳塞线上的开关相同.如果您想模拟音量增大或音量减小命令,您可以连接一个与按钮串联的电阻(音量减小为220欧姆,音量增加为600欧姆).
对于iOS设备,音频插孔的电气连接与Android相同,但如果您想连接按钮并在iOS中检测到它们,则必须克服额外的障碍.作为MFI(Made for iPod/iPhone)程序的一部分,当任何东西插入音频插孔(或闪电连接器)时,Apple会使用启动识别啁啾序列.您的设备必须在其中包含正确的芯片(或模拟该芯片的行为),否则当您无法响应身份验证请求时,按钮控件界面将被禁用.该协议似乎随着时间的推移而发生变化,因为使用一种型号手机的售后市场产品并不总能与另一种型号配合使用.苹果内部人士表示,MFI芯片包含Apple可以在连接时读取的序列号.他们说逆向工程认证在今天起作用,但Apple可以随时阻止它工作.
如果您想将其设计为产品,可以在此处申请MFI计划.
如果您只想构建一些设备,您将无法接受MFI计划.在这种情况下,您需要购买Hook + Switch接口(或类似的东西),否则您需要添加像Arduino或Teensy这样的小型微处理器来模拟认证啁啾,就像David Carne在这里所做的那样.
如果您只想构建一个工作按钮,最简单的方法是使用包含必要芯片的现有耳机,并简单地将按钮线与SLEEVE和RING2并联.如果我这样做,我会得到一条TRRS延长线,并将Big Buddy Button线连接到延长线的正确两根线.只要将一对经过Apple认证的耳机插入扩展程序以提供身份验证,您的Big Button就可以正常工作.然后你会像往常一样检测按钮按下(这里描述).
编辑:我测试了将附件按钮连接到插入iPhone的TRRS延长线的SLEEVE和RING2,只要将功能正常的耳机插入延长线,附件按钮就可以正常工作.这样,附件按钮最终与内置按钮平行,而不必拆开耳机.
您还可以选择其他替代方案.例如,您可以构建一个电路,只要按下按钮,该电路就会在两根导线上传输麦克风音调.然后,您将该信号插入SLEEVE和RING2之间的iOS设备,然后编写一个iOS程序来收听声音并将其视为按下按钮.此方法不需要MFI身份验证,并且现有的实用程序可以使您获得90%的权限.你可以在这里找到一个例子.
也可以通过BLE连接到iOS而无需注册MFI,并且由于Apple Accessibility包括使用蓝牙设备来控制某些iOS功能的能力,您可以在不需要身份验证的情况下执行此操作.
此处显示了大多数移动设备(包括iPhone)上TRRS连接器的连接示意图.
为方便起见,这里转载.
如果它是耳机插孔,你可以使用它来处理它
override func remoteControlReceived(with event: UIEvent?) {}
Run Code Online (Sandbox Code Playgroud)
并在其中切换这样的event?.type.subType东西.
override func remoteControlReceived(with event: UIEvent?) {
if let e = event , e.type == .remoteControl {
if e.subtype == UIEventSubtype.remoteControlPause {
// do something
}else if(e.subtype == .remoteControlPlay){
//do something else
}else if(e.subtype == .remoteControlTogglePlayPause){
// do something else
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
699 次 |
| 最近记录: |