A partire da Android 5.0.0 è possibile toccare a lungo una connessione WiFi e scrivere quella connessione a un tag ("Scrivi sul tag NFC"). È possibile trovare la fonte per tale operazione qui: WriteWifiConfigToNfcDialog.java. La riga relativa che richiede una connessione WiFi e crea un payload NDEF appare qui:Creazione di un record WiFi NDEF mediante l'applicazione/vnd.wfa.wsc in Android
String wpsNfcConfigurationToken = mWifiManager.getWpsNfcConfigurationToken(mAccessPoint.networkId);
mWifiManager
è un'istanza di WifiManager
, tuttavia getWpsNfcConfigurationToken
non fa parte del API. Tracciando questo metodo, possiamo trovare il suo commit qui: Add calls for NFC WSC token creation che purtroppo non aiuta. Qui è dove sono finite le mie indagini. Edit: ho scoperto il seguente stack di chiamate:
WifiServiceImpl.java
chiamate mWifiStateMachine.syncGetWpsNfcConfigurationToken(netId);
WifiStateMachine.java
chiamate mWifiNative.getNfcWpsConfigurationToken(netId);
WifiNative.java
ha finalmente il metodo
public String getNfcWpsConfigurationToken(int netId) { return doStringCommand("WPS_NFC_CONFIG_TOKEN WPS " + netId); }
che poi chiama
String result = doStringCommandNative(mInterfacePrefix + command);
dove doStringCommandNative
fa una chiamata di sistema (non riesce a trovare il codice per questo ovunque).
Quale ora è dove finisce l'indagine.
Sperando che qualcuno possa intervenire e mostrarmi un metodo che crea un NdefRecord
che è del tipo application/vnd.wfa.wsc
dato un SSID, una password, un tipo di crittografia/Auth.
Ho ovviamente ispezionato i byte di un record effettivo application/vnd.wfa.wsc
creato da Android ma ricreando manualmente questo processo con i byte sembra potenzialmente molto inaffidabile ed è incredibilmente noioso.
Grazie per la risposta e il tuo codice. Non è altrettanto hacky come mi sarei aspettato. : D – noone