導航:首頁 > 操作系統 > androidapiwifi

androidapiwifi

發布時間:2022-08-02 09:09:33

① 有關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?
  1. <spanstyle="font-size:18px;">packagecom.example.aptest;
  2. importjava.util.List;
  3. importandroid.net.wifi.WifiConfiguration;
  4. importandroid.net.wifi.WifiManager;
  5. publicclassWifiConnect{
  6. WifiManagerwifiManager;
  7. //定義幾種加密方式,一種是WEP,一種是WPA,還有沒有密碼的情況
  8. publicenumWifiCipherType
  9. {
  10. WIFICIPHER_WEP,WIFICIPHER_WPA,WIFICIPHER_NOPASS,WIFICIPHER_INVALID
  11. }
  12. //構造函數
  13. publicWifiConnect(WifiManagerwifiManager)
  14. {
  15. this.wifiManager=wifiManager;
  16. }
  17. //打開wifi功能
  18. privatebooleanopenWifi()
  19. {
  20. booleanbRet=true;
  21. if(!wifiManager.isWifiEnabled())
  22. {
  23. bRet=wifiManager.setWifiEnabled(true);
  24. }
  25. returnbRet;
  26. }
  27. //提供一個外部介面,傳入要連接的無線網
  28. publicbooleanconnect(StringSSID,StringPassword,WifiCipherTypeType)
  29. {
  30. if(!this.openWifi())
  31. {
  32. returnfalse;
  33. }
  34. //開啟wifi功能需要一段時間(我在手機上測試一般需要1-3秒左右),所以要等到wifi
  35. //狀態變成WIFI_STATE_ENABLED的時候才能執行下面的語句
  36. //WifiManager.WIFI_STATE_ENABLING2
  37. //WifiManager.WIFI_STATE_ENABLED3
  38. System.out.println("wifiManager.getWifiState()"+wifiManager.getWifiState());
  39. while(wifiManager.getWifiState()==WifiManager.WIFI_STATE_ENABLING)
  40. {
  41. System.out.println("wifiManager.getWifiState"+wifiManager.getWifiState());
  42. try{
  43. //為了避免程序一直while循環,讓它睡個100毫秒在檢測……
  44. Thread.currentThread();
  45. Thread.sleep(100);
  46. }
  47. catch(InterruptedExceptionie){
  48. }
  49. }
  50. WifiConfigurationwifiConfig=this.createWifiInfo(SSID,Password,Type);
  51. //
  52. if(wifiConfig==null)
  53. {
  54. returnfalse;
  55. }
  56. WifiConfigurationtempConfig=this.isExsits(SSID);
  57. if(tempConfig!=null)
  58. {
  59. wifiManager.removeNetwork(tempConfig.networkId);
  60. }
  61. intnetID=wifiManager.addNetwork(wifiConfig);
  62. booleanbRet=wifiManager.enableNetwork(netID,false);
  63. returnbRet;
  64. }
  65. //查看以前是否也配置過這個網路
  66. (StringSSID)
  67. {
  68. List<WifiConfiguration>existingConfigs=wifiManager.getConfiguredNetworks();
  69. for(:existingConfigs)
  70. {
  71. if(existingConfig.SSID.equals("""+SSID+"""))
  72. {
  73. returnexistingConfig;
  74. }
  75. }
  76. returnnull;
  77. }
  78. (StringSSID,StringPassword,WifiCipherTypeType)
  79. {
  80. WifiConfigurationconfig=newWifiConfiguration();
  81. config.allowedAuthAlgorithms.clear();
  82. config.allowedGroupCiphers.clear();
  83. config.allowedKeyManagement.clear();
  84. config.allowedPairwiseCiphers.clear();
  85. config.allowedProtocols.clear();
  86. config.SSID="""+SSID+""";
  87. if(Type==WifiCipherType.WIFICIPHER_NOPASS)
  88. {
  89. config.wepKeys[0]="""+""";;
  90. config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
  91. config.wepTxKeyIndex=0;
  92. //或者下面兩段代碼也可以
  93. //config.hiddenSSID=true;
  94. //config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
  95. }
  96. elseif(Type==WifiCipherType.WIFICIPHER_WEP)
  97. {
  98. config.wepKeys[0]="""+Password+""";
  99. config.hiddenSSID=true;
  100. config.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.SHARED);
  101. config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
  102. config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
  103. config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40);
  104. config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP104);
  105. config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
  106. config.wepTxKeyIndex=0;
  107. }
  108. elseif(Type==WifiCipherType.WIFICIPHER_WPA)
  109. {
  110. config.preSharedKey="""+Password+""";
  111. config.hiddenSSID=true;
  112. config.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);
  113. config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
  114. config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
  115. config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
  116. //config.allowedProtocols.set(WifiConfiguration.Protocol.WPA);//這句好像不行
  117. config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
  118. config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
  119. config.status=WifiConfiguration.Status.ENABLED;
  120. }
  121. else
  122. {
  123. returnnull;
  124. }
  125. returnconfig;
  126. }
  127. }
  128. </span>

② Android Wifi 如何實現:在程序中把SSID和密碼都確定了,點擊連接就連接上指定的wifi

點擊打開設定,
點擊WLAN連接,
點擊添加WLAN。

③ android怎麼實現開機自動啟動wifi熱點

1.新建一個Receiver監聽系統的BOOT_COMPLETE Broadcast,就可以實現開機的監聽 2.啟動WiFi熱點。這個網上一大堆的代碼,大體的思路就是:檢測WiFI是否開啟,如果開啟了,那就不操作。如果沒有開啟,那就調用API開啟它。

④ native.js支持android wifi direct相關API的調用嗎

現在,Android的支持Wi -Fi的直接點對點點對點(P2P)Android系統的供電設備和其他類型的設備,沒有一個熱點或互聯網連接之間的連接。Android框架提供了一套Wi - Fi的P2P的API,允許你去發現和連接到其他設備時,每個設備的Wi -Fi的直接支持,然後溝通跨越距離遠遠長於藍牙連接迅速連接。
android.net.wifi.p2p,一個新的軟體包,包含所有的API執行同行等連接與Wi - Fi。 你需要與主類是WifiP2pManager,您可以調用getSystemService(WIFI_P2P_SERVICE)收購。WifiP2pManager包括API,允許您:
1、您P2P連接的應用程序通過調用initialize
2、探索通過調用附近的設備discoverPeers
開始通過調用P2P連接connect以及一些其他的介面和類是必要的,如:
WifiP2pManager.ActionListener介面,讓您能夠接收的操作時,如發現同行或連接到他們的成功或失敗的回調。
WifiP2pManager.PeerListListener界面,您可以收到有關發現同行的信息。 回調提供了一個WifiP2pDeviceList,您可以從中檢索一個WifiP2pDevice范圍內的每個設備對象和獲取信息,如設備的名稱,地址,設備類型,設備支持的WPS配置。
WifiP2pManager.GroupInfoListener界面,您可以收到一個P2P組信息。 回調提供了一個WifiP2pGroup對象,它提供了所有者,網路名稱和密碼的信息,如組。
WifiP2pManager.ConnectionInfoListener界面,您可以得到當前連接的信息。 回調提供了一個WifiP2pInfo對象,它具有信息,如一個組是否已經形成,誰是該組的所有者。
為了使用的Wi - Fi P2P的API,你的應用程序必須要求以下用戶許可權:
1、ACCESS_WIFI_STATE
2、CHANGE_WIFI_STATE
3、INTERNET (雖然你的應用程序不技術上連接到互聯網,溝通的Wi - Fi標準的Java套接字直接同行需要Internet許可權)。
Android系統還廣播了幾種不同的行動,在特定的Wi - Fi P2P事件:
1、WIFI_P2P_CONNECTION_CHANGED_ACTION :P2P連接狀態發生了變化。這與EXTRA_WIFI_P2P_INFOWifiP2pInfo與EXTRA_NETWORK_INFONetworkInfo對象的對象EXTRA_NETWORK_INFOEXTRA_NETWORK_INFOEXTRA_WIFI_P2P_INFO EXTRA_WIFI_P2P_INFO 。
2、WIFI_P2P_STATE_CHANGED_ACTION :P2P的狀態已經改變之間的啟用和禁用。 它攜帶EXTRA_WIFI_STATE要麼WIFI_P2P_STATE_DISABLED或WIFI_P2P_STATE_ENABLED
WIFI_P2P_PEERS_CHANGED_ACTION等設備的列表已經改變。
3、WIFI_P2P_THIS_DEVICE_CHANGED_ACTION :該設備的細節已經改變。

⑤ android開發中,連接wifi需要使用哪個函數

我也正在搞這個,問題也很多,都還沒解決,這是我在網上查到的方法:
// 添加一個網路並連接
public void AddNetwork(WifiConfiguration wcg) {
int wcgID = mWifiManager.addNetwork(wcg);
mWifiManager.enableNetwork(wcgID, true);
}

但是我有問題就是,首先:ScanResult中獲取的SSID等信息和WifiConfiguration中獲取的SSID信息有什麼不一樣,一個是掃描到的,一個是連接後得到的?這個我不理解。第二:按照上面的連接代碼,只需要得到WifiConfiguration對象就可以了,我通過public List<WifiConfiguration> getConfiguredNetworks ()得到的WifiConfiguration對象就可以拿去連接了?既然我通過這個就能連接,那我拿ScanResult中的信息有什麼用?還有就是,WifiConfiguration對象是在哪個階段能獲取的?啟動Wifi?掃描開始?或者是連接上ap後?我表示很迷茫。第三:怎麼通過代碼設置一台手機為Ap?我找不到相關的方法。第四:假設兩台手機,一台做Ap,一台連接,連接上了,然後數據方面怎麼傳輸?藍牙有個BuletoothSocket和BuletoothServiceSocket,Wifi呢?直接只用JAVA的Socket?

⑥ 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);
}
}

}

⑦ 如何用Delphi XE Android實現手機和wifi串列口模塊通信

uses System.SysUtils,

Androidapi.Helpers,

Androidapi.JNIBridge,

Androidapi.Jni.Net,

Androidapi.JNI.GraphicsContentViewText,

Androidapi.JNI.JavaTypes,

FMX.Helpers.Android;

function GetWIFIIP:string;

var

WFM:JObject;

WifiManager:JWifiManager;

WifiInfo:JWifiInfo;

IP:Integer;

begin

WFM:=TAndroidHelper.Context.getSystemService(TJContext.JavaClass.WIFI_SERVICE);

WifiManager:=TJWifiManager.Wrap((WFM as ILocalObject).GetObjectID);

WifiInfo:=WifiManager.getConnectionInfo;

IP:=WifiInfo.getIpAddress;

Result:=Format('%d.%d.%d.%d',[Lo(IP),Hi(IP),Lo(IP shr 16),IP shr 24]);

end;

//安卓系統WIFI下獲取本機IP

閱讀全文

與androidapiwifi相關的資料

熱點內容
vb編程10個隨機函數 瀏覽:19
程序員個人簡介100 瀏覽:770
土木工程師演算法工程師 瀏覽:90
javaexcel導入oracle 瀏覽:877
如何設置異地伺服器 瀏覽:882
為什麼安卓手機藍牙耳機不會彈窗 瀏覽:546
linuxf77編譯器安裝教程 瀏覽:949
android本地錄音許可權 瀏覽:446
加密u盤內容怎麼拷貝 瀏覽:283
安卓手機為什麼看不到iso文件 瀏覽:582
用圖片做文件夾圖標 瀏覽:693
java正則表達式語法 瀏覽:865
美圖秀在線壓縮圖片 瀏覽:184
蘋果自帶控制app是什麼 瀏覽:907
孩子學編程怎麼樣 瀏覽:589
網路編程經典書籍 瀏覽:612
曲靖創建網站java程序員 瀏覽:690
256位加密中是什麼意思 瀏覽:97
php多維數組去重 瀏覽:308
做程序員這一行儲備人才怎麼看 瀏覽:462