【发布时间】:2016-04-21 01:54:09
【问题描述】:
从 Android 5.0.0 开始,您可以长按 WiFi 连接并将该连接写入标签(“写入 NFC 标签”)。您可以在此处找到该操作的源代码:WriteWifiConfigToNfcDialog.java。采用 WiFi 连接并创建 NDEF 有效负载的相关行似乎在这里:
String wpsNfcConfigurationToken = mWifiManager.getWpsNfcConfigurationToken(mAccessPoint.networkId);
mWifiManager 是WifiManager 的一个实例,但是getWpsNfcConfigurationToken 不是API 的一部分。通过追踪这个方法,我们可以在这里找到它的提交:Add calls for NFC WSC token creation,不幸的是没有帮助。 这是我的调查已经结束的地方。编辑:
我发现了以下调用堆栈:
WifiServiceImpl.java 呼叫mWifiStateMachine.syncGetWpsNfcConfigurationToken(netId);
WifiStateMachine.java 呼叫mWifiNative.getNfcWpsConfigurationToken(netId);
WifiNative.java终于有方法了
public String getNfcWpsConfigurationToken(int netId) {
return doStringCommand("WPS_NFC_CONFIG_TOKEN WPS " + netId);
}
然后调用
String result = doStringCommandNative(mInterfacePrefix + command);
doStringCommandNative 在哪里进行系统调用(在任何地方都找不到此代码)。
现在调查结束。
希望有人可以介入并向我展示一种方法,该方法在给定 SSID、密码、加密/身份验证类型的情况下创建 application/vnd.wfa.wsc 类型的 NdefRecord。
我当然检查了由 Android 创建的实际 application/vnd.wfa.wsc 记录的字节,但是使用字节手动重新创建此过程似乎非常不可靠并且非常乏味。
【问题讨论】:
标签: java android wifi nfc ndef