android通过反射获取wifi热点ap的ssid和password

通过查看android5.1的源码,其实wifi热点的ssid和password已经在WifiConfiguration的构造方法里面初始化了,但是是hide的api, 第三方开发者调不到。

/** copy constructor {@hide} */

public WifiConfiguration(WifiConfiguration source) {

    if (source != null) {
            networkId = source.networkId;
            status = source.status;
            disableReason = source.disableReason;
            disableReason = source.disableReason;
            SSID = source.SSID;
            BSSID = source.BSSID;
            FQDN = source.FQDN;
            naiRealm = source.naiRealm;
            preSharedKey = source.preSharedKey;

      ........

    }

}

红色部分便是SSID和password,他的构造函数的参数是自身对象,所以只要我们初始化一个WifiConfiguration对象,再用反射就能直接获取SSID和preSharedKey.

public static WifiConfiguration getWifiConfiguration(Context context){
        WifiConfiguration mWifiConfig = null;
        try{
            WifiManager wifiManager = (WifiManager) context.getSystemService(WIFI_SERVICE);
            Method method = wifiManager.getClass().getMethod("getWifiApConfiguration");
            method.setAccessible(true);
            mWifiConfig = (WifiConfiguration) method.invoke(wifiManager);
        }
        catch (Exception e){
            e.printStackTrace();
        }
        return mWifiConfig;
    }


    /**
     * @param flag 0: ssid
     *             1: pwd
     */
    public static String getApSSIDAndPwd(Context context, int flag) {
        WifiConfiguration mWifiConfig = getWifiConfiguration(context);
        String ssid = null;
        String pwd = null;
        if (null != mWifiConfig) {
            Field[] fields = mWifiConfig.getClass().getDeclaredFields();
            if (null != fields) {
                for (Field field : fields){
                    try {
                        if (field.getName().equals("SSID")) {
                            ssid = field.get(mWifiConfig).toString();
                            Log.e(TAG, "AP SSI = " + ssid);
                        } else if (field.getName().equals("preSharedKey")) {
                            pwd = field.get(mWifiConfig).toString();
                            Log.e(TAG, "AP pwd = " + pwd);
                        }
                    }
                    catch (Exception e) {
                        e.printStackTrace();
                        Log.e(TAG, "getApSSIDAndPwd()-->error:" + e);
                    }
                }
            }
        }
        if (null == ssid){
            ssid = "Unknown";
        }
        if (null == pwd) {
            pwd = "Unknown";
        }
        if (0 == flag){
            return ssid;
        }else {
            return pwd;
        }
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LakeSideHu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值