Android-WIFI(扫描 连接)

Android-WIFI(扫描 连接),第1张

概述公司想着把自己的产品(中央报警器)设置为主页面让用户永远只能在这款产品上面进行一个 *** 作,当时我写的时候连接WIFI是需要进入系统设置页面去连接的(主要是当时我也不会写WIFI功能啊!!!)然后不想什么就来什么了!产品让我把WIFI功能写一下(嘤嘤嘤,我才是刚入Android的小白,我怎么写啊!脑阔

公司想着把自己的产品(中央报警器)设置为主页面让用户永远只能在这款产品上面进行一个 *** 作,当时我写的时候连接WIFI是需要进入系统设置页面去连接的(主要是当时我也不会写WIFI功能啊!!!)然后不想什么就来什么了!产品让我把WIFI功能写一下(嘤嘤嘤,我才是刚入AndroID的小白,我怎么写啊!脑阔疼脑阔疼)

需求

获取wifi列表 显示wifi强度 连接wifi 显示wifi连接信息(只是我理解出来的,当时产品说让我写个wifi脱离系统QAQ,wifi脱离系统是怎么个连接wifi法?问他也是说:这是你的专业范围,你自己去理解。微笑面对一切)

然后发了一顿牢骚:没做过呀,我不会啊,这怎么写啊,闲聊两小时不如百度一分钟(其实是差不多把所有wifi的案例都看完了)

网上有很多关于获取wifi列表,并连接wifi的文章,然后我每一篇都点来看看。然后发现,耶,还蛮有趣的!一如研究深似海,发现了各种问题,然后自己记在小本本上,万一我遇见了呢?是不是就不用死的太惨了~

权限

虽然是刚入AndroID的小白,但是发现安卓的每一次更新都是权限的加强,刚开始的时候就是给权限折磨的要死!!!记得我写电话短信功能的时候,给了权限但是就是拨打不了手机号也发送不了短信,后面还是给了权限在手动打开,下面献上关于wifi的权限好叭!!!

<uses-permission androID:name="androID.permission.CHANGE_NETWORK_STATE" ></uses-permission><uses-permission androID:name="androID.permission.CHANGE_WIFI_STATE" ></uses-permission><uses-permission androID:name="androID.permission.ACCESS_NETWORK_STATE" ></uses-permission><uses-permission androID:name="androID.permission.ACCESS_WIFI_STATE" ></uses-permission>

你们以为这就完了???哇,太天真了叭。确实,很老很老的版本确实可以这样就完事了,但是6.0版本后的就需要定位了叭(这个是我网上看到的,不是我也不知道,反正我知道现在是需要就对了嘻嘻)继续给大家献上后面的权限

<uses-permission androID:name="androID.permission.ACCESS_FINE_LOCATION"/>、<uses-permission androID:name="androID.permission.ACCESS_COARSE_LOCATION"/>

好了,你权限都加完了。但是发现还是不行,你就跑过来问我,小李怎么回事啊?不行啊,我都加了权限了为什么还是获取不到wifi的列表呢?(呆子!!!我都说了要手动打开手动打开了!不知道怎么手动打开嘛?那我继续把代码给你好了呀!满意了叭)

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && checkSelfPermission(                Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED ) {            requestPermissions(new String[] { Manifest.permission.CALL_PHONE,Manifest.permission.ACCESS_COARSE_LOCATION},                    0x1234);        }

你们也可以用这种方式去手动打开其他的权限,百度上一大堆(百度yyds!!!)
权限的问题解决了那就是编码了!但你打开权限你就成功了一半了!反正我是这么认为的,编码嘛easy啦!

编码部分

掐指一算,有些人是不是会问,既然权限给了,我怎么编码扫描wifi呢?
唉,那你是真的跟三天前的我一样,啥也不会啊我的宝,给你吧给你吧,谁要小李心好呢?
扫描wifi

public voID startScan() {		wifiManager.startScan();		// 扫描返回结果列表		scanResultList = wifiManager.getScanResults();		// 扫描配置列表		wifiConfigList = wifiManager.getConfigurednetworks();	}

噗嗤,你不会还要我教你怎么去显示叭?哎呀,这个也就几行代码的事情了呀

	@Suppresslint("NewAPI")	private ArrayList<WifIElement> getAllNetWorkList() {        // 每次点击扫描之前清空上一次的扫描结果        mWifIElementList.clear();        if(mWifiadmin.isWifIEanbled()){            // 开始扫描网络            mWifiadmin.startScan();        }else{            Toast.makeText(getApplicationContext(), "请先打开wifi!", Toast.LENGTH_SHORT).show();        }        mScanResultList = mWifiadmin.getWifiList();        wifiConfigList = mWifiadmin.getWifiConfigList();        WifIElement element;        if (mScanResultList != null) {            for (int i = 0; i < mScanResultList.size(); i++) {                // 得到扫描结果                mScanResult = mScanResultList.get(i);                if (!mScanResult.SSID.equals("") || mScanResult.SSID == ""){                    element = new WifIElement();                    element.setSsID(mScanResult.SSID);                    element.setBssID(mScanResult.BSSID);                    element.setStatus(cheackStatus(mScanResult.SSID));                    element.setFrequency(mScanResult.frequency);                    element.setLevel(mScanResult.level);                    mWifIElementList.add(element);                }            }        }        return mWifIElementList;    }

还有显示内容的容器啊这些就不用我在多写了叭?(要源码的可以私聊我,我直接给你!小李有点懒,不想都写了!!!)

wifi开关变化

 @OverrIDe    public voID onClick(VIEw v) {        // Todo auto-generated method stub        switch (v.getID()) {            case R.ID.wifi_conn_switch_btn:                mWifiConnAdapter = new WifiConnlistadapter(getApplicationContext(), getAllNetWorkList());                mLvWifiConInfo.setAdapter(mWifiConnAdapter);                break;            case R.ID.wifi_conn_scan_btn:                if (isOpen) {                    Toast.makeText(getApplicationContext(), "正在关闭wifi", Toast.LENGTH_SHORT).show();                    if (mWifiadmin.closeWifi()) {                        Toast.makeText(getApplicationContext(), "wifi关闭成功", Toast.LENGTH_SHORT).show();                        mBtnWifiScan.setText("打开wifi");                        isOpen = false;                    } else {                        Toast.makeText(getApplicationContext(), "wifi关闭失败", Toast.LENGTH_SHORT).show();                    }                } else {                    Toast.makeText(getApplicationContext(), "正在打开wifi", Toast.LENGTH_SHORT).show();                    if (mWifiadmin.OpenWifi()) {                        Toast.makeText(getApplicationContext(), "wifi打开成功", Toast.LENGTH_SHORT).show();                        mBtnWifiScan.setText("关闭wifi");                        isOpen = true;                    } else {                        Toast.makeText(getApplicationContext(), "wifi打开失败", Toast.LENGTH_SHORT).show();                    }                }                break;            default:                break;        }    }

打开wifi

public boolean OpenWifi() {		boolean bRet = true;		if (!wifiManager.isWifIEnabled()) {			bRet = wifiManager.setWifIEnabled(true);		}		return bRet;	}

关闭wifi

public boolean closeWifi() {		if (!wifiManager.isWifIEnabled()) {			return true;		} else {			return wifiManager.setWifIEnabled(false);		}	}

连接wifi
这里的话肯定是要去传入它必要的几个参数啊
就比如ssID pwd type

private WifiConfiguration CreateWifiInfo(String SSID, String Password,											 WifiCipherType Type) {		WifiConfiguration wc = new WifiConfiguration();		wc.allowedAuthAlgorithms.clear();		wc.allowedGroupCiphers.clear();		wc.allowedKeyManagement.clear();		wc.allowedPairwiseCiphers.clear();		wc.allowedProtocols.clear();		wc.SSID = "\"" + SSID + "\"";		if (Type == WifiCipherType.WIFICIPHER_nopASS) {			wc.wepKeys[0] = "";			wc.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);			wc.wepTxKeyIndex = 0;		} else if (Type == WifiCipherType.WIFICIPHER_WEP) {			wc.wepKeys[0] = "\"" + Password + "\"";			wc.hIDdenSSID = true;			wc.allowedAuthAlgorithms					.set(WifiConfiguration.AuthAlgorithm.SHARED);			wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);			wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);			wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40);			wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP104);			wc.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);			wc.wepTxKeyIndex = 0;			// System.out.println(wc.preSharedKey);			System.out.println(wc);		} else if (Type == WifiCipherType.WIFICIPHER_WPA) {			wc.preSharedKey = "\"" + Password + "\"";			wc.hIDdenSSID = true;			// 用来判断加密方法。			// 可选参数:LEAP只用于leap,			// OPEN 被wpa/wpa2需要,			// SHARED需要一个静态的wep key			wc.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);			// 用来判断加密方法。可选参数:CCMP,TKIP,WEP104,WEP40			wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);			wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);			// WifiConfiguration.KeyMgmt 键管理机制(keymanagerment),使用KeyMgmt 进行。			// 可选参数IEEE8021X,NONE,WPA_EAP,WPA_PSK			wc.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);			// WifiConfiguration.PairwiseCipher 设置加密方式。			// 可选参数 CCMP,NONE,TKIP			wc.allowedPairwiseCiphers					.set(WifiConfiguration.PairwiseCipher.TKIP);			wc.allowedPairwiseCiphers					.set(WifiConfiguration.PairwiseCipher.CCMP);			// WifiConfiguration.Protocol 设置一种协议进行加密。			// 可选参数 RSN,WPA,			wc.allowedProtocols.set(WifiConfiguration.Protocol.WPA); // for WPA			wc.allowedProtocols.set(WifiConfiguration.Protocol.RSN); // for WPA2			// wifiConfiguration.Status 获取当前网络的状态。		} else {			return null;		}		return wc;	}

咳咳,写到这里也该告一段落了,欢迎各位大佬指点!!!不足之处请无情~

总结

以上是内存溢出为你收集整理的Android-WIFI(扫描 连接)全部内容,希望文章能够帮你解决Android-WIFI(扫描 连接)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1004417.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存