如何在Android中切换主机

时间:2018-09-18 21:36:32

标签: java android

我正在尝试通过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";
    }

1 个答案:

答案 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。