我希望通过wifi连接硬件。我使用wifiManager进行连接,但在真实设备上,如果SSID和密码未保存,则无法通过编程方式连接到SSID并发送或接收任何数据。如果设备中记住了SSID和密码,那么我的代码就可以正常工作。
以下是我的连接SSID的代码:
private void connect2SSIDWifi() throws Exception{
WifiManager wifi = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
WifiInfo wifiInfo = wifi.getConnectionInfo();
try{
if(wifiInfo.getSSID().equals(publicClass.ssid)) return;
}catch(Exception ex){}
try {
Thread.sleep(500);
} catch (InterruptedException e) {}
WifiConfiguration wc = new WifiConfiguration();
wc.SSID = "\""+publicClass.ssid+"\"";
wc.preSharedKey = "\""+publicClass.ps+"\"";
wc.hiddenSSID = true;
wc.status = WifiConfiguration.Status.ENABLED;
wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
wc.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
wc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
wc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
wc.allowedProtocols.set(WifiConfiguration.Protocol.RSN);
int netid = wifi.addNetwork(wc);
wifi.enableNetwork(netid, true);
wifi.reconnect();
}
如果wifi连接正常,发送数据的代码可以正常工作。
Socket socket = new Socket();
socket.connect(new InetSocketAddress(publicClass.ip, publicClass.port), 300);
PrintWriter out = new PrintWriter(new BufferedWriter(
new OutputStreamWriter(socket.getOutputStream())), true);
out.println(Packet);
Log.d("tag",Packet);
Toast.makeText(context, "sent", Toast.LENGTH_SHORT).show();
socket.close();