我正在尝试通过Internet和LAN访问ESP8266,并且我正在使用No-ip通过Internet连接,但是如果我没有Internet连接,我将无法访问ESP8266,所以如果有,我必须连接到LAN没有互联网连接。我在这里阅读论坛,几乎尝试了所有但无法通过LAN访问ESP8266的情况。
String address = "mynoipdomain"; //global variable
String lan = "myesplocalip"; // global variable
String serverAdress;
ConnectivityManager connectivityManager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
assert connectivityManager != null; //i added this line because Android Studio was giving warning that "Method invocation 'getNetworkInfo' may produce 'java.lang.NullPointerException'"
if(connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState() == NetworkInfo.State.CONNECTED ||
connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState() == NetworkInfo.State.CONNECTED) {
serverAdress = address + ":3001"; //3001 is port
}
else{
serverAdress = lan + ":3001";
}
答案 0 :(得分:0)
if
条件可能应该是:
String bssid = getCurrentSsid(getContext());
if(bssid != null && bssid.equals("HOME_BSSID")) {
serverAdress = lan + ":3001";
} else if(connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState() == NetworkInfo.State.CONNECTED || connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState() == NetworkInfo.State.CONNECTED) {
serverAdress = address + ":3001";
} else {
// both networks are offline
}
与此方法(source)组合:
public String getCurrentSsid(Context context) {
String ssid = null;
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = cm.getActiveNetworkInfo();
if (networkInfo == null) {
return null;
}
if (networkInfo.isConnected()) {
final WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
final WifiInfo connectionInfo = wifiManager.getConnectionInfo();
if (connectionInfo != null && !StringUtil.isBlank(connectionInfo.getSSID())) {
ssid = connectionInfo.getSSID();
}
}
return ssid;
}
为了在连接家庭WiFi时更喜欢本地IP。