如何在Android上使用耳机插孔捕获磁条数据?

时间:2012-03-29 05:50:54

标签: android

如果有人想编写与物理设备交互的Android应用程序,特别是使用移动设备音频插孔的阅读器 (例如,像Square Inc一样)这是怎么做到的? 是否有与阅读器交互并获取卡数据的API?

当公司创建一个阅读器(物理设备)时,它是否提供相关的apis?

是否从应用程序员中抽象出了物理细节?

我找到了可以从音频插孔录制磁条数据的AudioRecord类 但我无法确定如何捕获实际的刷卡事件和 从RAW DATA中提取有意义的数据 任何人都可以帮助我

非常欢迎任何意见!

1 个答案:

答案 0 :(得分:4)

这通常的工作方式是对设备发出的数据信号进行编码,如读卡器,这样可以在另一端解码。声音是波,不同的振幅对应不同的响度,不同的频率对应不同的音高。想象一下,你有一个正弦波,它在高频和低频之间变化,彼此之间的差别很大,以便于区分。发送二进制数据(0和1)的设备可以将该数据转换为随频率变化的音频信号(另一种是变化的幅度)。接收器,在这种情况下是移动设备,将信号解码回0和1。这称为“频移键控”(请在此处查看更多信息:http://en.wikipedia.org/wiki/Frequency-shift_keying)。

实现这一点的最简单方法是尝试找到已经完成它的开放库。发送数据的设备还需要包含某种可以执行初始调制的微控制器。如果你遇到任何好的图书馆,请告诉我,因为我现在 找。

要回答您的问题,公司通常不提供API等来执行此操作。

将数字信号转换为音频信号,然后返回,这似乎是一项额外的工作,你说得对。但是,每个移动设备都具有基本相同的耳机插孔,而Android上的USB端口与iPhone的照明连接器或以前iPhone中的连接器截然不同。通过网络或蓝牙无线发送也是一种选择,但它们也有其缺点。

现在移动设备必须使用支持麦克风的特殊耳机插孔,否则无法接收输入,只能输出声音。大多数智能手机都可以做到这一点。

无线电工作原理(FM =频率调制,AM =幅度调制)。 旧的拨号调制解调器使用FSK,这就是为什么你每次连接都听到那些奇怪的噪音。

希望有所帮助!