如果有人想编写一个与物理设备交互的android应用程序,特别是使用mobiles audio jack的阅读器
(例如,Square Inc)是如何做到的?
是否有一个api与读卡器交互并获取卡片数据?
当公司创建阅读器(物理设备)时,它是否提供相关的api?
物理细节是从应用程序程序员那里抽象出来的吗?
我找到了音频录制类,它可以从音频插孔录制磁条数据
但我不知道如何捕捉实际的刷卡事件
从原始数据中提取有意义的数据
有人能帮我吗
欢迎任何意见!
最佳答案
通常的工作方式是对设备(如读卡器)发出的数据信号进行编码,编码方式可以在另一端解码。声音是一种波,不同的振幅对应不同的响度,不同的频率对应不同的音调。假设你有一个正弦波,它在一个高频率和一个低频率之间变化,这两个频率之间的差异足够大,所以很容易区分。发送二进制数据(0和1)的设备可以将该数据转换为随频率变化的音频信号(另一种选择是变幅)。接收器(在本例中是移动设备)将信号解码回0和1。这称为“频移键控”(在此处查看更多信息:http://en.wikipedia.org/wiki/Frequency-shift_keying)。
实现这一点最简单的方法是尝试找到一个已经打开的库。发送数据的设备还需要包含某种能够执行初始调制的微控制器。如果你遇到任何好的图书馆,请告诉我,因为我现在
看。
为了回答您的问题,公司通常不提供api等来执行此操作。
这看起来像是把数字信号转换成音频信号,然后再转换回来的额外工作,你说得对。然而,每个移动设备基本上都有相同的耳机插孔,而android上的usb端口与iphone的照明接口或以前的iphone中的接口截然不同。通过网络或蓝牙无线发送也是一种选择,但它们也有各自的缺点。
现在移动设备必须使用支持麦克风的专用耳机插孔,否则无法接收输入,只能输出声音。大多数智能手机都能做到这一点。
无线电按此原理工作(调频=调频,调幅=调幅)。
旧的拨号调制解调器使用fsk,这就是为什么每次连接时都会听到那些奇怪的声音。
希望能有帮助!