Начиная с Android 5.0.0, вы можете долгое время подключаться к WiFi-соединению и записывать это соединение с тегом ( "Write to NFC tag" ). Здесь вы можете найти источник этой операции: WriteWifiConfigToNfcDialog.java. Соответствующая строка, которая принимает соединение WiFi и создает полезную нагрузку NDEF, находится здесь:
String wpsNfcConfigurationToken = mWifiManager.getWpsNfcConfigurationToken(mAccessPoint.networkId);
mWifiManager
является экземпляром WifiManager
, однако getWpsNfcConfigurationToken
не является частью API. Отслеживая этот метод, мы можем найти его фиксацию здесь: Добавить вызовы для создания токенов NFC WSC, к сожалению, никакой помощи. Вот где закончилось мое расследование. Редактировать:
Я обнаружил следующий стек вызовов:
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
выполняет системный вызов (не может найти код для этого в любом месте).
Что сейчас заканчивается, когда расследование заканчивается.
Надеясь, что кто-то может вмешаться и показать мне метод, который создает NdefRecord
, который относится к типу application/vnd.wfa.wsc
, заданному идентификатором SSID, паролем, шифрованием /Auth.
Я, конечно, проверил байты фактической записи application/vnd.wfa.wsc
, созданной Android, но ручное воссоздание этого процесса с байтами кажется потенциально очень ненадежным и невероятно утомительным.