显然,如果您拥有root手机,则可以使用com.android.nfc_extras
来访问卡片模拟功能(Secure element Access Control on ICS 4.0.4)。
我知道这是一个非官方的API,但有没有任何文档(官方或非官方)?或者另一方面,卡片仿真比我意识到的要复杂得多吗?
答案 0 :(得分:5)
请记住,访问安全元素和进行卡片模拟实际上是两件不同的事情。安全元件基本上是封闭的;你无法修改它。使用com.android.nfc_extras
,您可以通过安全元素打开或关闭卡片仿真。就是这样。
您可以从应用程序向安全元素发送APDU,例如与IsoDep
标记进行通信(在NFC堆栈的较低级别部分中都使用相同的代码路径)。有关如何执行此操作的详细说明,请参阅http://nelenkov.blogspot.nl/2012/08/accessing-embedded-secure-element-in.html。
答案 1 :(得分:2)
没有文件。如果您想深入了解这个API,我建议您直接查看源代码。它并不多,只有两个文件实现和定义API。你可以在这里获得一份副本:
http://source-android.frandroid.com/frameworks/base/nfc-extras/java/com/android/nfc_extras/
在API中你会发现像ExecutionEnvironment,Routes等概念。不要让这些概念让你感到困惑。最后,您可以使用NfcExtras接口执行以下操作:
通过设置使用ROUTE_ON_WHEN_SCREEN_ON创建的路线来开启卡片仿真。
通过设置“关闭”路线关闭卡片仿真。
使用嵌入式安全元素交换数据。
就是这样!所有其余的只是API糖,使事物看起来比实际上更大。
一些额外的警告:
如果要调用函数,则需要在nfcee_access.xml文件中将应用程序列入白名单,该文件位于/ etc中。如果您没有自行列出白名单,则会出现访问冲突异常。
您无法区分手机中存在的嵌入式安全元件或支持NFC的UICC。
无法与手机中支持NFC的UICC对话。您只能与嵌入式安全元件(也就是具有NXP芯片组的手机的SmartMX芯片)进行通信。只有通过ISO7816接口的RID接口才能与UICC本身进行通信,这是 - 如果可能的话 - 专有。
最后但并非最不重要:无法保证NfcExtras接口可以执行任何操作。该界面由谷歌钱包使用,但移动支付市场是分段的,每个人都自己煮汤。 我知道至少有一家大型移动支付提供商完全忽略了NfcExtras界面,禁用了它并使用他自己的隐藏机制打开和关闭。