Criando um registro WiFi NDEF usando application / vnd.wfa.wsc no Android
No Android 5.0.0, é possível tocar muito em uma conexão Wi-Fi e gravar essa conexão em uma tag ("Write to NFC tag"). Você pode encontrar a fonte dessa operação aqui:WriteWifiConfigToNfcDialog.java. A linha relevante que usa uma conexão WiFi e cria uma carga útil NDEF parece estar aqui:
String wpsNfcConfigurationToken = mWifiManager.getWpsNfcConfigurationToken(mAccessPoint.networkId);
mWifiManager
é uma instância deWifiManager
, ContudogetWpsNfcConfigurationToken
não faz parte da API. Ao rastrear esse método, podemos encontrar seu commit aqui:Adicionar chamadas para criação de token NFC WSC o que infelizmente não ajuda.Foi aqui que minha investigação terminou. Editar: eu descobri a seguinte pilha de chamadas:
WifiServiceImpl.java
chamadasmWifiStateMachine.syncGetWpsNfcConfigurationToken(netId);
WifiStateMachine.java
chamadasmWifiNative.getNfcWpsConfigurationToken(netId);
WifiNative.java
finalmente tem o método
public String getNfcWpsConfigurationToken(int netId) { return doStringCommand("WPS_NFC_CONFIG_TOKEN WPS " + netId); }
que então chama
String result = doStringCommandNative(mInterfacePrefix + command);
OndedoStringCommandNative
faz uma chamada do sistema (não é possível encontrar o código para isso em nenhum lugar).
Agora é onde a investigação termina.
Esperando que alguém possa intervir e me mostrar um método que cria umNdefRecord
esse é do tipoapplication/vnd.wfa.wsc
dado um SSID, senha, tipo de criptografia / autenticação.
Obviamente, inspecionei os bytes de umapplication/vnd.wfa.wsc
O registro criado pelo Android, mas recriar manualmente esse processo com os bytes, parece potencialmente muito pouco confiável e é incrivelmente entediante.