安卓WiFi信息错误

3

我正在开发一款需要使用互联网的应用程序。

我使用WiFiInfo类来了解网络状态,并使用WifiManager来启用和管理可用的Wi-Fi连接。

但结果是未知的ssid。我已经修改了AndroidManifest.xml,以授予android.permission.ACCESS_WIFI_STATE权限。也许你们中的某些人可以帮助我……这是代码:

TextView textWifiManager = (TextView)findViewById(R.id.WifiManager);
       TextView textWifiInfo = (TextView)findViewById(R.id.WifiInfo);
       TextView textIp = (TextView)findViewById(R.id.Ip);

       WifiManager myWifiManager = (WifiManager)getSystemService(Context.WIFI_SERVICE);

       WifiInfo myWifiInfo = myWifiManager.getConnectionInfo();
       int myIp = myWifiInfo.getIpAddress();

       textWifiManager.setText(myWifiManager.toString());
       textWifiInfo.setText(myWifiInfo.toString());

       int intMyIp3 = myIp/0x1000000;
       int intMyIp3mod = myIp%0x1000000;

       int intMyIp2 = intMyIp3mod/0x10000;
       int intMyIp2mod = intMyIp3mod%0x10000;

       int intMyIp1 = intMyIp2mod/0x100;
       int intMyIp0 = intMyIp2mod%0x100;

       textIp.setText(String.valueOf(intMyIp0)
         + "." + String.valueOf(intMyIp1)
         + "." + String.valueOf(intMyIp2)
         + "." + String.valueOf(intMyIp3)
         );
   }
}
3个回答

0

我不是 OP,但我也遇到了同样的问题。wifiInfo.getSSID() 返回了 <unknown ssid>。添加 ACCESS_NETWORK_STATE 也没有解决这个问题。 - zmbq
zmbq - 有点好奇,自从我回答了你的问题“在WIFI连接时如何获取SSID?”之后,你还遇到这个问题吗? - Eric Woodruff

-1

编辑:确保您的Wi-Fi已打开并连接到网络。调用getSSID(),并使用权限ACCESS_NETWORK_STATE。

编辑2:我刚刚检查了一个执行此操作的应用程序,它具有ACCESS_WIFI_STATE和ACCESS_NETWORK_STATE两个权限。

改为调用getSSID(),如下所示:

public String getConnectedNetworkSSID() {
    WifiManager wifiMgr = (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE);
    WifiInfo wifiInfo = wifiMgr.getConnectionInfo();
    String name = wifiInfo.getSSID();
    return name;
}

这将返回设备连接的wifi网络的名称。如果设备未连接到wifi网络,则返回未知。


@Eric Woodruff 不是这样的。OP 调用了错误的方法。他应该调用 getSSID() 而不是 getIpAddress() 和 toString()。 - Adam
这仍然会返回相同的“Unknown”值。 - Eric Woodruff
问题的前提是他已经连接上了,但结果显示为“未知的SSID”。 - Eric Woodruff
我同意这是暗示,但他在问题中并没有明确说明。无论如何,他应该确保自己连接到WIFI(而不仅仅是移动数据),他应该调用getSSID()函数,并且需要ACCESS_WIFI_STATE权限。 - Adam

-1

试试这个:

import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;

public class NetworkUtil {

public static int TYPE_WIFI = 1;
public static int TYPE_MOBILE = 2;
public static int TYPE_NOT_CONNECTED = 0;
public static String connectionStatus = "";
public static String connectionKind = "";
public static String connectedTo = "";


public static int getConnectivityStatus(Context context) {
    ConnectivityManager cm = (ConnectivityManager) context
            .getSystemService(Context.CONNECTIVITY_SERVICE);        
    NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
    if (null != activeNetwork) {
        if(activeNetwork.getType() == ConnectivityManager.TYPE_WIFI){
            try{
                connectedTo = activeNetwork.getExtraInfo().replace("\"", "");                   
            }
            catch(Exception WifiNet){
                connectedTo = "WiFi";                   
            }                               
            return TYPE_WIFI;             
        }
        if(activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE){
            try{
                connectedTo = activeNetwork.getExtraInfo();
            }
            catch(Exception MobileNet){
                connectedTo = "2g/3g/LTE";
            }
            return TYPE_MOBILE;
        }
    }
    connectedTo = "N/A";
    return TYPE_NOT_CONNECTED;
}

public static String getConnectivityStatusString(Context context) {
    int conn = NetworkUtil.getConnectivityStatus(context);
    String status = null;
    try{
        if (conn == NetworkUtil.TYPE_WIFI) {
            status = "Wifi enabled"+" "+connectedTo;            
            connectionKind = "Wifi";
        } else if (conn == NetworkUtil.TYPE_MOBILE) {
            status = "Mobile data enabled";
            connectionKind = "Mobile";
        } else if (conn == NetworkUtil.TYPE_NOT_CONNECTED) {
            status = "Not connected to Internet";
            connectionKind = "N/A";
        }           
    }
    catch(Exception mobile){
        if (conn == NetworkUtil.TYPE_WIFI) {
            status = "Wifi enabled"+" "+connectedTo;            
            connectionKind = "Wifi";
        } else if (conn == NetworkUtil.TYPE_NOT_CONNECTED) {
            status = "Not connected to Internet";
            connectionKind = "N/A";
        }
    }        
    return status;
}
}

这怎么帮助获取SSID? - Eric Woodruff
通过调用第二个方法,您可以获取连接状态,如果您在WIFI上,则添加SSID(connectedTo变量)...我有一个小服务显示一个toast,以便知道我连接到哪个网络而不必查看设置。 - Fco P.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接