A. 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; }}
B. 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:我以前做過設計讀取系統硬體信息的時候用敬敬過啟氏,悄稿散但是很長時間沒用了,這段注釋是從網上來的,希望能幫到你。
C. Android開發如何使用代碼配置手機wifi的pac地址
這里用到的手機型號為魅族M6120,其中的具體步驟如下:
1、打開手機的設置界面,需要選擇無線網路這一項。
D. 安卓4.4wifi開啟命令
首先來分析一下為什麼不能上網:Android 4.0系統目前僅支持通過wifi上網,x-86版也不例外,但是在VMware下木有wifi驅動,所以即使機子連著網,Android系統也上不去。解決方法:首先確定機子是處於聯網狀態的。
1、進入Android-x86的終端模擬器(相當於Win系統的命令提示符)。
2、輸入命令「ip a」獲取所有網卡配置如果可以發現eth0網卡,那麼恭喜,系統已經認出了VM的虛擬網卡,可以繼續看下面了。如果沒發現這個eth0,那麼還是將此系統刪除,重新安裝別的版本吧。Android-x86有好幾個版本,我試驗之後發現eeepc的版本對網卡的支持比較好。
3、用su命令獲取最高許可權。
4、為網卡指定ip、掩碼、網關等信息。如果DHCP可用,則執行「dhcpcd eth0」自動獲取,如果沒有DHCP服務可用,則可以手動指定,命令是:su ifconfig eth0 192.168.10.250 netmask 255.255.255.0 up route add default gw 192.168.10.1 dev eth0。相信能看到本文此處的小盆友都能看明白,就不再解釋了。4、設置dns。執行如下命令:setprop net.dns18.8.8.8,如果你不想用google的這個dns伺服器,也可以使用本地的,不過要保證可用。至此,我們已經為凳旁eth0網卡配置了ip和dns信息,登錄Android-x86,打開自帶的瀏覽器,可以發現瀏覽網頁已經木有問題了,但是想要下載某些軟體的時候,還是無法下載,下載進度條會一直停止不動,一些棗螞橡系統自帶的服務(如地圖)也仍然無法使用。這是因為系統只認wifi,沒有wifi設備系統就認為沒有上網,為乙太網卡配置IP和DNS之後可以騙過瀏覽器,但是系統不認那一套,所以上網的問題只能是初步解決,希望有高手可以解決這個問題。(貌似網上已經有一位日本友人做出了VirtualBox虛擬機下的鏡像,VMware下的還有待高手繼續開發)另,看到有的網友提出了別的解決方案:通過「電子郵件」設置好自己的賬戶,然後在電腦上物運將需要安裝的APK文件發給自己,在虛擬上打開收件箱就可以直接安裝了。這倒是一種不錯的解決方案。
E. 華為安卓手機修改wifi國家代碼
華為安卓手機修改wifi國家代碼操作步驟:
1、打開手機並在桌面上找到設置圖標,點擊進入。
2、進入設置頁面,點擊wlan可看到已經連接了無線網。
3、進入網路屬性頁面,點擊下方的靜態ip並打開。
4、點擊dns1並復制其中的鏈接。
5、成功復制後,打開瀏覽器並粘貼此鏈接進行搜索。
6、搜索完成後進入頁面進行修改即可。
F. android開關wifi為什麼都要採用isWifiEnabled()
因為安卓API里只有這方法。
wifi開關代碼:
/**
* 是否開啟 wifi true:開啟 false:關閉
*
* 一定要加入許可權: <uses-permission
* android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
* <uses-permission
* android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
*
*
* @param isEnable
*/
public void setWifi(boolean isEnable) {
//
if (mWm == null) {
mWm = (WifiManager) this.getSystemService(Context.WIFI_SERVICE);
return;
}
System.out.println("wifi===="+mWm.isWifiEnabled());
if (isEnable) {// 開啟wifi
if (!mWm.isWifiEnabled()) {
mWm.setWifiEnabled(true);
}
} else {
// 關閉 wifi
if (mWm.isWifiEnabled()) {
mWm.setWifiEnabled(false);
}
}
}
G. Android開發,怎麼在代碼里獲得當前連接wifi的埠號
首先AndroidMainfest.xml文件中添加許可權: <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- 獲取WIFI信息狀態的許可權 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <!-- 獲取網路狀態改變的許可權 -->
然後再activity中添加如下代碼: private String getConnectWifiSsid(){
WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
Log.d("wifiInfo", wifiInfo.toString());
Log.d("SSID",wifiInfo.getSSID());
return wifiInfo.getSSID();
}
該介面即返回當前連接的wifi的名字,也就是SSID。
H. Android 代碼設置Wifi 熱點密碼設置的問題
netConfig.allowedKeyManagement.set(4);
//WifiConfiguration.KeyMgmt.WPA2_PSK=4,但是不能直接拿到,所以參數直接設成4就行了