android源碼wifi
Ⅰ android 如何 wifi列表 源碼~
WifiManager wifi_service = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
List<ScanResult> list = wifi_service.getScanResults();
StringBuilder buidler = new StringBuilder();
String result = Constants.EMPTY_STR;
if (list != null) {
for (ScanResult scanResult : list) {
buidler.append(scanResult.BSSID).append(SPLIT_STR);
}
result = buidler.toString();
result = result.substring(0, result.length() - 1);
}
Ⅱ Android WiFi開發,如何自動連接的代碼
public class WifiAutoConnectManager {
private static final String TAG = WifiAutoConnectManager.class.getSimpleName();
WifiManager wifiManager;
// 定義幾種加密方式,一種是WEP,一種是WPA,還有沒有密碼的情況 public enum WifiCipherType { WIFICIPHER_WEP, WIFICIPHER_WPA, WIFICIPHER_NOPASS, WIFICIPHER_INVALID }
// 構造函數 public WifiAutoConnectManager(WifiManager wifiManager) { this.wifiManager = wifiManager; }
// 提供一個外部介面,傳入要連接的無線網 public void connect(String ssid, String password, WifiCipherType type) { Thread thread = new Thread(new ConnectRunnable(ssid, password, type)); thread.start(); }
// 查看以前是否也配置過這個網路 private WifiConfiguration isExsits(String SSID) { List<WifiConfiguration> existingConfigs = wifiManager.getConfiguredNetworks(); for (WifiConfiguration existingConfig : existingConfigs) { if (existingConfig.SSID.equals("\"" + SSID + "\"")) { return existingConfig; } } return null; }
private WifiConfiguration createWifiInfo(String SSID, String Password, WifiCipherType Type) { WifiConfiguration config = new WifiConfiguration(); config.allowedAuthAlgorithms.clear(); config.allowedGroupCiphers.clear(); config.allowedKeyManagement.clear(); config.allowedPairwiseCiphers.clear(); config.allowedProtocols.clear(); config.SSID = "\"" + SSID + "\""; // nopass if (Type == WifiCipherType.WIFICIPHER_NOPASS) { config.wepKeys[0] = ""; config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE); config.wepTxKeyIndex = 0; } // wep if (Type == WifiCipherType.WIFICIPHER_WEP) { if (!TextUtils.isEmpty(Password)) { if (isHexWepKey(Password)) { config.wepKeys[0] = Password; } else { config.wepKeys[0] = "\"" + Password + "\""; } } config.allowedAuthAlgorithms.set(AuthAlgorithm.OPEN); config.allowedAuthAlgorithms.set(AuthAlgorithm.SHARED); config.allowedKeyManagement.set(KeyMgmt.NONE); config.wepTxKeyIndex = 0; } // wpa if (Type == WifiCipherType.WIFICIPHER_WPA) { config.preSharedKey = "\"" + Password + "\""; config.hiddenSSID = true; config.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN); config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP); config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK); config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP); // 此處需要修改否則不能自動重聯 // config.allowedProtocols.set(WifiConfiguration.Protocol.WPA); config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP); config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP); config.status = WifiConfiguration.Status.ENABLED; } return config; }
// 打開wifi功能 private boolean openWifi() { boolean bRet = true; if (!wifiManager.isWifiEnabled()) { bRet = wifiManager.setWifiEnabled(true); } return bRet; }
class ConnectRunnable implements Runnable { private String ssid;
private String password;
private WifiCipherType type;
public ConnectRunnable(String ssid, String password, WifiCipherType type) { this.ssid = ssid; this.password = password; this.type = type; }
@Override public void run() { // 打開wifi openWifi(); // 開啟wifi功能需要一段時間(我在手機上測試一般需要1-3秒左右),所以要等到wifi // 狀態變成WIFI_STATE_ENABLED的時候才能執行下面的語句 while (wifiManager.getWifiState() == WifiManager.WIFI_STATE_ENABLING) { try { // 為了避免程序一直while循環,讓它睡個100毫秒檢測…… Thread.sleep(100); } catch (InterruptedException ie) { } }
WifiConfiguration wifiConfig = createWifiInfo(ssid, password, type); // if (wifiConfig == null) { Log.d(TAG, "wifiConfig is null!"); return; }
WifiConfiguration tempConfig = isExsits(ssid);
if (tempConfig != null) { wifiManager.removeNetwork(tempConfig.networkId); }
int netID = wifiManager.addNetwork(wifiConfig); boolean enabled = wifiManager.enableNetwork(netID, true); Log.d(TAG, "enableNetwork status enable=" + enabled); boolean connected = wifiManager.reconnect(); Log.d(TAG, "enableNetwork connected=" + connected); } }
private static boolean isHexWepKey(String wepKey) { final int len = wepKey.length();
// WEP-40, WEP-104, and some vendors using 256-bit WEP (WEP-232?) if (len != 10 && len != 26 && len != 58) { return false; }
return isHex(wepKey); }
private static boolean isHex(String key) { for (int i = key.length() - 1; i >= 0; i--) { final char c = key.charAt(i); if (!(c >= '0' && c <= '9' || c >= 'A' && c <= 'F' || c >= 'a' && c <= 'f')) { return false; } }
return true; }}
Ⅲ 怎樣利用wifi跟別人的wifi連接。求android源碼
這個簡單啊,不需要什麼源碼的,只需要把第二個路由器的WDS開啟,再設置一下就可以了。我說話關鍵的地方吧。網上說的是兩邊都要填MAC,其實很容易誤導人的,現在的WDS就你就把它當成當你用網卡去連路由器一樣的。
比如說是從A1到A2再到A3,那麼A1不用開WDS,A2開瞭然後填上A1的MAC(LAN口地址,可以搜索的哈)和連接密碼(網卡登陸用的),A3中開WDS填A2的MAC和連接密碼,就這么簡單。
SSID可一樣也可以不一樣,一樣的話就是隨便連三個中的某一個不用換SSID和密碼。
A2,A3關掉DHCP,WLAN設動態IP,LAN口IP 設A1一個網段的如192.168.1.2和192.168.1.3(先改這個重啟路由之後,把其他設置好了之後在關掉DHCP重啟,一定要把關DHCP放在最後一步,而且重啟之後保證能連上上一個路由,要不如果先設置了WDS又沒連上的話,就得恢復了)
當然頻段要一樣,一般就在1,6,11三個中選吧,還有就是你搜索的時候看哈 信號強度,信號不好也惱火
Ⅳ Android 代碼設置Wifi 熱點密碼設置的問題
java">netConfig.allowedKeyManagement.set(4);
//WifiConfiguration.KeyMgmt.WPA2_PSK=4,但是不能直接拿到,所以參數直接設成4就行了
Ⅳ Android開發如何使用代碼配置手機wifi的pac地址
這里用到的手機型號為魅族M6120,其中的具體步驟如下:
1、打開手機的設置界面,需要選擇無線網路這一項。
Ⅵ 有關android內核的wifi驅動api
通過程序來實現wifi的自動連接。
這兩天對android的wifi功能研究了一下。下面共享出自己封裝的WifiConnect類。(這里參考了ZXing開源項目中wifi模塊)
首先,要了解android關於wifi的API.
如果喜歡看English API,這是android關於wifi的API地址:
http://developer.android.com/reference/android/net/wifi/package-summary.html(配置Wifi,還需要設定許可權,android中關於wifi的API文檔中說明了要添加什麼許可權)
如果一看英語就頭疼,這里有關於wifi的api的中文解釋
http://note.sdo.com/u/1500295617/n/prb71~jGAHfpnM0l000bgN
切入正題,這里貼出一個封裝了的類(WifiConnect),在實例化WifiConnect對象時,需要傳入一個WifiManager對象。WifiConnect類向外部提供一個Connect方法,參數是無線的SSID,password,還有加密類型。
[java] view plainprint?- <spanstyle="font-size:18px;">packagecom.example.aptest;
- importjava.util.List;
- importandroid.net.wifi.WifiConfiguration;
- importandroid.net.wifi.WifiManager;
- publicclassWifiConnect{
- WifiManagerwifiManager;
- //定義幾種加密方式,一種是WEP,一種是WPA,還有沒有密碼的情況
- publicenumWifiCipherType
- {
- WIFICIPHER_WEP,WIFICIPHER_WPA,WIFICIPHER_NOPASS,WIFICIPHER_INVALID
- }
- //構造函數
- publicWifiConnect(WifiManagerwifiManager)
- {
- this.wifiManager=wifiManager;
- }
- //打開wifi功能
- privatebooleanopenWifi()
- {
- booleanbRet=true;
- if(!wifiManager.isWifiEnabled())
- {
- bRet=wifiManager.setWifiEnabled(true);
- }
- returnbRet;
- }
- //提供一個外部介面,傳入要連接的無線網
- publicbooleanconnect(StringSSID,StringPassword,WifiCipherTypeType)
- {
- if(!this.openWifi())
- {
- returnfalse;
- }
- //開啟wifi功能需要一段時間(我在手機上測試一般需要1-3秒左右),所以要等到wifi
- //狀態變成WIFI_STATE_ENABLED的時候才能執行下面的語句
- //WifiManager.WIFI_STATE_ENABLING2
- //WifiManager.WIFI_STATE_ENABLED3
- System.out.println("wifiManager.getWifiState()"+wifiManager.getWifiState());
- while(wifiManager.getWifiState()==WifiManager.WIFI_STATE_ENABLING)
- {
- System.out.println("wifiManager.getWifiState"+wifiManager.getWifiState());
- try{
- //為了避免程序一直while循環,讓它睡個100毫秒在檢測……
- Thread.currentThread();
- Thread.sleep(100);
- }
- catch(InterruptedExceptionie){
- }
- }
- WifiConfigurationwifiConfig=this.createWifiInfo(SSID,Password,Type);
- //
- if(wifiConfig==null)
- {
- returnfalse;
- }
- WifiConfigurationtempConfig=this.isExsits(SSID);
- if(tempConfig!=null)
- {
- wifiManager.removeNetwork(tempConfig.networkId);
- }
- intnetID=wifiManager.addNetwork(wifiConfig);
- booleanbRet=wifiManager.enableNetwork(netID,false);
- returnbRet;
- }
- //查看以前是否也配置過這個網路
- (StringSSID)
- {
- List<WifiConfiguration>existingConfigs=wifiManager.getConfiguredNetworks();
- for(:existingConfigs)
- {
- if(existingConfig.SSID.equals("""+SSID+"""))
- {
- returnexistingConfig;
- }
- }
- returnnull;
- }
- (StringSSID,StringPassword,WifiCipherTypeType)
- {
- WifiConfigurationconfig=newWifiConfiguration();
- config.allowedAuthAlgorithms.clear();
- config.allowedGroupCiphers.clear();
- config.allowedKeyManagement.clear();
- config.allowedPairwiseCiphers.clear();
- config.allowedProtocols.clear();
- config.SSID="""+SSID+""";
- if(Type==WifiCipherType.WIFICIPHER_NOPASS)
- {
- config.wepKeys[0]="""+""";;
- config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
- config.wepTxKeyIndex=0;
- //或者下面兩段代碼也可以
- //config.hiddenSSID=true;
- //config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
- }
- elseif(Type==WifiCipherType.WIFICIPHER_WEP)
- {
- config.wepKeys[0]="""+Password+""";
- config.hiddenSSID=true;
- config.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.SHARED);
- config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
- config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
- config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40);
- config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP104);
- config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
- config.wepTxKeyIndex=0;
- }
- elseif(Type==WifiCipherType.WIFICIPHER_WPA)
- {
- config.preSharedKey="""+Password+""";
- config.hiddenSSID=true;
- config.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);
- config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
- config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
- config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
- //config.allowedProtocols.set(WifiConfiguration.Protocol.WPA);//這句好像不行
- config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
- config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
- config.status=WifiConfiguration.Status.ENABLED;
- }
- else
- {
- returnnull;
- }
- returnconfig;
- }
- }
- </span>
Ⅶ android開發中如果我想代碼實現打開wifi熱點如何實現
1·申請許可權:
android.permission.ACCESS_WIFI_STATE
android.permission.CHANGE_WIFI_STATE
android.permission.WAKE_LOCK
2·獲取WifiManager
wifiManager = (WifiManager) this.getSystemService(Context.WIFI_SERVICE);
3·開啟、關閉wifi
if (wifiManager.isWifiEnabled()) {
wifiManager.setWifiEnabled(false);
} else {
wifiManager.setWifiEnabled(true);
}
4·注意
如果遇到force-close, 選wait即可, 因為啟動wifi需要幾秒鍾, UI如果5妙鍾還沒反映的話, 系統會給你這個force close exception
PS:我以前做過設計讀取系統硬體信息的時候用過,但是很長時間沒用了,這段注釋是從網上來的,希望能幫到你。
Ⅷ android通過代碼怎麼控製程序禁用wifi
有時我們需要在APP中控制WIFI和數據連接的開關,在Android中,是有相應的介面可以實現這一功能的。
控制WIFI開關
控制WIFI開關需要使用WifiManager這一系統服務。首先我們通過代碼獲取到它:
WifiManager wifiManager = (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE);
通過WifiManager提供的介面,我們就可以實現控制WIFI的開關——我們首先判斷當前WIFI的狀態,如果是打開狀態,則調用介面關閉;反之如果當前是關閉狀態,則調用介面打開:
if (wifiManager.isWifiEnabled()) {
wifiManager.setWifiEnabled(false);
} else {
wifiManager.setWifiEnabled(true);
}
編寫代碼之後,我們還需要在AndroidManifest中聲明相應的許可權才能使代碼正確生效,否則會拋出 Java.lang.SecurityException 異常。其中
isWifiEnabled介面需要申請 android.permission.ACCESS_WIFI_STATE 許可權
setWifiEnabled介面需要申請android.permission.CHANGE_WIFI_STATE許可權:
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
Ⅸ 求Android手機WiFi接收數據程序(需要接受到源代碼)(在線等)
你可以選擇socket通訊啊,一個手機作為socket伺服器,一個作為客戶端,這樣就可以了!
Ⅹ 怎麼用代碼在android4.4上設置wifi為靜態ip-CSDN論壇
在framework層,有wifiManager.java可以進行wifiConfiguration的配置,將IP設置進去就可以。如果覺得不清楚,很簡單,你可以下載一份android源代碼,package/apps/Settings這個git庫的代碼download下來,然後,分析一下WifiConfigStore的類,基本一看就可以明白。