Android NetworkInfo的getTypeName()返回移动事件,即使已连接到移动设备上的WIFI

Android NetworkInfo的getTypeName()返回移动事件,即使已连接到移动设备上的WIFI,android,Android,在下面的代码中,activeinfo.getTypeName()即使连接到wifi也会返回mobile。我在某个地方读到,wifi不会在emulator上被检测到,所以我甚至在我的设备上尝试过。但当连接到wifi或移动数据时(我甚至尝试关闭移动数据,只使用wifi而不是同时打开两者),它仍然返回移动数据,当我同时关闭wifi和移动数据时返回“未连接” ConnectivityManager conmgr = (ConnectivityManager)getSystemService(Contex

在下面的代码中,activeinfo.getTypeName()即使连接到wifi也会返回mobile。我在某个地方读到,wifi不会在emulator上被检测到,所以我甚至在我的设备上尝试过。但当连接到wifi或移动数据时(我甚至尝试关闭移动数据,只使用wifi而不是同时打开两者),它仍然返回移动数据,当我同时关闭wifi和移动数据时返回“未连接”

ConnectivityManager conmgr = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeinfo = conmgr.getActiveNetworkInfo();
    WifiManager wifi=(WifiManager) getSystemService(Context.WIFI_SERVICE);
    Log.e("sometag", activeinfo.getTypeName());
    String ssid;

    if(activeinfo!=null && activeinfo.isConnected())
    {
//eventhough the following comparison is wrong, the next else should return "wifi" right? well, it doesn't.

        if(activeinfo.getTypeName()=="WIFI")            {

            WifiInfo w=wifi.getConnectionInfo();
            ssid= w.getSSID();


        }
        else
        {
            ssid = activeinfo.getTypeName();
        }
    }
    else
        ssid= "not connected";

问题出在这一行:

if (activeinfo.getTypeName() == "WIFI") {
与其他编程语言不同,在Java中对字符串使用
=
运算符不会产生通常预期的结果。这是因为它测试
reference
相等性(即内存中的相同位置),而不是内容相等性

请看一下

,但是activeinfo.getTypeName()会在日志和else语句中返回mobile。控件没有进入if循环,所以我想我可能在比较中犯了一个错误,就像你说的,因此在循环之前记录了值,else语句也返回mobile。