Начиная с Android 5.0.0 вы можете долго нажимать на соединение WiFi и записывать это соединение с тегом («Write to NFC tag»). Здесь вы можете найти источник этой операции: WriteWifiConfigToNfcDialog.java. Соответствующая линия, которая принимает соединение Wi-Fi и создает полезную нагрузку ЦНК, как представляется, здесь:Создание записи NDEF WiFi с использованием приложения/vnd.wfa.wsc в Android
String wpsNfcConfigurationToken = mWifiManager.getWpsNfcConfigurationToken(mAccessPoint.networkId);
mWifiManager
является экземпляром WifiManager
, однако getWpsNfcConfigurationToken
не является частью API. Отслеживая этот метод, мы можем найти его фиксацию здесь: Add calls for NFC WSC token creation, который, к сожалению, не поможет. Вот где закончилось мое расследование. Edit: Я узнал следующий стек вызовов:
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, Password, Encryption/Auth.
Я, конечно же, проверил байты фактической записи application/vnd.wfa.wsc
, созданной Android, но ручное воссоздание этого процесса с байтами кажется потенциально очень ненадежным и невероятно утомительным.
Спасибо за ответ и ваш код. Это не так сложно, как я ожидал. : D – noone