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