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>
2. 在android上查看wifi狀態,代碼如下:
不知道你的程序報的是什麼錯,給你一個例子吧,不過方法和你的有點差別:
public class WifiAdmin {
/**WiFi Manager**/
private WifiManager wifimanager;
/**WiFi Information**/
private WifiInfo wifiinfo;
/**Activity NetWork List**/
private List<ScanResult> netlist;
/**Configured NetWork List**/
private List<WifiConfiguration> connectedlist;
/**WiFi Lock**/
private WifiLock wifilock;
public WifiAdmin(Context context) {
wifimanager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
}
/**
* WiFi Operate
* */
/**Open WiFi**/
public void openWifi() {
if (!wifimanager.isWifiEnabled()) {
wifimanager.setWifiEnabled(true);
}
}
/**Close WiFi**/
public void closeWifi() {
if (wifimanager.isWifiEnabled()) {
wifimanager.setWifiEnabled(false);
}
}
/**WiFi State**/
public int checkState() {
return wifimanager.getWifiState();
}
/**
* WiFiLock Operate
* */
/**Create WiFiLock**/
public void creatWifiLock() {
wifilock = wifimanager.createWifiLock("Test");
}
/**Lock WiFi**/
public void acquireWifiLock() {
wifilock.acquire();
}
/**Clear WiFiLock**/
public void releaseWifiLock() {
if (wifilock.isHeld()) {
wifilock.release();
}
}
/**
* WiFiInfo Operate
* */
/**Get WiFiInfo**/
public WifiInfo getWifiInfo(){
wifiinfo = wifimanager.getConnectionInfo();
return wifiinfo;
}
/**
* NetWork Operate
* */
/**Scan**/
public void startScan() {
wifimanager.startScan();
netlist = wifimanager.getScanResults();
connectedlist = wifimanager.getConfiguredNetworks();
}
/**Get Configured NetWork**/
public List<WifiConfiguration> getConfiguration() {
return connectedlist;
}
/**Get Activity NetWork**/
public List<ScanResult> getWifiList() {
return netlist;
}
/**Connect a NetWork**/
public void connectConfiguration(int index) {
if (index < 0 || index > connectedlist.size()) {
return;
}
wifimanager.enableNetwork(connectedlist.get(index).networkId,true);
}
/**Add a NetWork**/
public void addNetwork(WifiConfiguration wcg) {
int wcgID = wifimanager.addNetwork(wcg);
wifimanager.enableNetwork(wcgID, true);
}
/**DisConnect a NetWork**/
public void disconnectWifi(int netId) {
wifimanager.disableNetwork(netId);
wifimanager.disconnect();
}
}
3. 為什麼Android 源碼裡面找不到WIFI類
SDK API中 Dev Guide中,Wi-Fi Direct
4. Android之WIFI-基礎篇NativeDaemonConnector分析
概述
詳情旦中攔:
註:源碼7.1
1.實現介面Runnable, Handler.Callback, Watchdog.Monitor
2.構造方法
3.run
4.讀處理
5.寫培胡處理。以execute為案例
6.案例
7.總結
8.補充模胡亮點
android.util.LocalLog
5. Android開發如何使用代碼配置手機wifi的pac地址
這里用到的手機型號為魅族M6120,其中的具體步驟如下:
1、打開手機的設置界面,需要選擇無線網路這一項。
6. android 給我一段代碼,點擊一個按鈕,手機就連上指定的wifi
public class HotspotActivity extends Activity {
private WifiManager wifiManager;
private Button open;
private boolean flag=false;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//獲取wifi管理服務
wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
open=(Button)findViewById(R.id.open_hotspot);
//通過按鈕事件設置熱點
open.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//如果是打開狀態就關閉,如果是關閉就打開
flag=!flag;
setWifiApEnabled(flag);
}
});
}
// wifi熱點開關
public boolean setWifiApEnabled(boolean enabled) {
if (enabled) { // disable WiFi in any case
//wifi和熱點不能同時打開,所以打開熱點的時候需要關閉wifi
wifiManager.setWifiEnabled(false);
}
try {
//熱點的配置類
WifiConfiguration apConfig = new WifiConfiguration();
//配置熱點的名稱(可以在名字後面加點隨機數什麼的)
apConfig.SSID = "YRCCONNECTION";
//配置熱點的密碼
apConfig.preSharedKey="12122112";
//通過反射調用設置熱點
Method method = wifiManager.getClass().getMethod(
"setWifiApEnabled", WifiConfiguration.class, Boolean.TYPE);
//返回熱點打開狀態
return (Boolean) method.invoke(wifiManager, apConfig, enabled);
} catch (Exception e) {
return false;
}
}
}
在人家網易博客上看到的
博主:bsky
7. 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);
}
8. 求android仿快牙、茄子快傳之類利用手機wifi熱點進行文件傳輸的項目源碼,很急,求幫助!
X寶去買吧 ,有源碼的網友估計都忙著賺錢呢,