androidwifi開發
① 安卓如何開發WIFI模塊程序。
其實你把問題想得太復雜了,你只要想,WiFi模塊的作用就是一個轉換器,將串口轉換成無線WiFi數據,就行,我以前用的HX-M02串口wifi模塊做的實驗,個人感覺不錯,希望對你有幫助。
② 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; }}
③ Android開發中如何建立一個wifi熱點
wifi熱點的建立不是Java能做的,這里要使用C語言來調用底層的東西才能實現熱點功能,wifiManager這個類只是wifi的管理類,這個是不能實現熱點的,它只是可以獲取你目前連接的路由器的mac地址,名稱等信息。
④ android wifi 開發中 如何判斷成功連接上了指定的wifi熱點
首先通過WifiManager對象獲取系統服務的WIFI_SERVICE,然後調用getConnectionInfo()獲得WifiInfo對象,再通過WifiInfo對象獲取已連上wifi的SSID(實際上是housyunhin說的WifiInfo.getSSID()和其他wifi信息),之後判斷是否匹配即可
⑤ 安卓wifi開發,要使用modbus協議,請問該怎麼使用
"你好 想問你一個問題~如果我用wifi使用socket發送讀寫寄存器命令,wifi端用rtu能實現嗎?還是必須用modbus/tcp?"
可以. MODBUS其實可以從硬體層與軟體層來看 . 硬體層就是通訊的媒介, 一般就是CAT網線或者是RS485這兩種居多.
軟體層面則分為三個類別, 1: MODBUS TCP(可簡單理解為加了一個封包頭的MODBUS命令)
2. MODBUS RTU (簡單理解為具有CRC校驗機制的MODBUS令令) 3. MODBUS ASCII (與RTU相同, 只是命令改為ASCII明碼)
再回來看您的問題, WiFi是基於SCOKET也就是TCP方式通訊. 這只是一條道路, 只要MODBUS主機與MODBUS從機事先說好了, 兩者都用RTU(具有CRC校驗的方式)做通訊, 就可以正常的通訊.
這種方式, 一般俗稱為 "RTU OVER TCP" 的MODBUS協定. 即把RTU的格式直接透過SOCKET發送或接收, 就不像MODBUS TCP帶前特定的包頭了.
另外, 也有人利用UDP來傳遞MODBUS命令的. 也是OK的. 總之, 硬體層與軟體層只要主從機間一致了. 都能通訊上的. 唯一的差別是與其它MODBUS設備的兼容度問題了. 最通用也就是兼容性最高的, 就是 "MODBUS TCP" 與 "MODBUS RTU" 這兩種了.
⑥ Android系統手機WiFi通信功能開發
IDE就用Eclipse就足夠了 對於Wifi的控制 android.net.wifi下有不少介面 但是要分別開發電視端和手機端 多思考就能找到電視和手機之間通訊的最好方式
⑦ 安卓APP開發怎麼訪問WIFI
根使用路由器的「懶人模式一鍵設置」來配置路由器上網參數,並且在加密認證方式那裡被默認選擇了「自動」的話,就有可能就會出現手機能連WIFI但不能上網的問題
WIFI加密認證類型默認選擇「自動」,導致問題出現
WIFI加密認證類型默認選擇「自動」,導致問題出現
解決方法:既然知道是WIFI加密類型被默認選擇了「自動」的原因,那麼解決方案也很簡單,手動將WIFI的加密類型選擇為最安全可靠的「WPA2-PSK」就行。重啟路由器之後,所有設備都能正常上網。
⑧ 安卓開發 WiFi通信
不能實現同時通信,只能相互切換,開啟wifi不會關閉移動網路,只是連接上wifi後,網路通道默認走wifi通道,但是可以設置,優先走移動網路通道,有adb命令:
svc wifi prefer
這個是默認的狀態,有wifi就是wifi優先。
svc data prefer
這個使移動數據連接比wifi優先。有移動數據開啟的話先用移動數據,沒有就用wifi。
另外開啟/關閉 wifi 和移動數據的命令
svc data enable/disable
svc wifi enable/disable
⑨ 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控制
wifiConfigurations為空了吧。getConfiguredNetworks()的說明
Upon failure to fetch or when when Wi-Fi is turned off, it can be null.
獲取失敗或wifi關閉時候,返回null