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

androidwifiscan

發布時間:2023-02-05 21:45:50

A. android的WiFi功能總結

先進行WiFi許可權的聲明

<!-- 獲取WiFi狀態 -->

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

<!--  api <= Android29調用setWifiEnabled  -->

<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />

<!-- 定位許可權(api >= 23 用於 WIFI掃描)-->

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

注意:ACCESS_FINE_LOCATION和ACCESS_COARSE_LOCATION是危險級許可權需要使用中還需要動態申請,申請其中一個即可。

WifiManager mWifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);

if (Build.VERSION.SDK_INT >=Build.VERSION_CODES.R) {

Intent panelIntent =new Intent(Settings.Panel.ACTION_WIFI);

startActivityForResult(panelIntent,null);

}else{ mWifiManager.setWifiEnabled(!isEnable);}

可以通過監聽系統廣播來了解WiFi狀態。

WIFI_STATE_CHANGED_ACTION:WiFi開關狀態;

SCAN_RESULTS_AVAILABLE_ACTION:WiFi列表變化;

RSSI_CHANGED_ACTION:WiFi信號強度變化。

IntentFilter mFilter =new IntentFilter();

mFilter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);

mFilter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);

mFilter.addAction(WifiManager.RSSI_CHANGED_ACTION);

mReceiver =new BroadcastReceiver() {

@Override

public void onReceive(Context context,Intent intent) {

    handleEvent(intent);

}

};

registerReceiver(mReceiver, mFilter);

private void handleEvent(Intent intent) {

String action = intent.getAction();

if (WifiManager.WIFI_STATE_CHANGED_ACTION.equals(action)) {

final int wifiState =mWifiManager.getWifiState();

if(wifiState ==WifiManager.WIFI_STATE_ENABLED){

    postDelayed(()->{mRefreshLayout.autoRefresh();},1000);

}

}else if (WifiManager.SCAN_RESULTS_AVAILABLE_ACTION.equals(action)) {

}else if (WifiManager.RSSI_CHANGED_ACTION.equals(action)) {

if(System.currentTimeMillis() -mLastUpateWifiRssiTime <1000){//刷新太快

            return;

}

}

updateWifiChange();

}

切記:wifistate切換到WifiManager.WIFI_STATE_ENABLED,mWifiManager.isWifiEnabled()需要有個等待時間切換。

3的基礎上解析廣播應答

private void updateWifiChange() {

final int wifiState =mWifiManager.getWifiState();

switch (wifiState) {

case WifiManager.WIFI_STATE_ENABLED:

ArrayListresults = (ArrayList)mWifiManager.getScanResults();

updateApListView(results);

mWlanSb.setChecked(mWifiManager.isWifiEnabled() );

break;

case WifiManager.WIFI_STATE_ENABLING:

break;

case WifiManager.WIFI_STATE_DISABLING:

mAdapter.clearData();

mWlanSb.setChecked(mWifiManager.isWifiEnabled() );

break;

case WifiManager.WIFI_STATE_DISABLED:

break;

}

}

B. 淫技:android無屏操作之adb操控wifi

1.開啟wpa_supplicant服務端

meta_wpa_supplicant.conf是配置文件,ctrl_interface是wpa_supplicant與wpa_cli通信的介面,ssid為要連接的wifi熱點名稱,key_mgmt為加密方式(NONE表示不加密 O(∩_∩)O~)。

2.wpa_cli連接wpa_supplicant

3.掃描wifi

4.使能network0

上面都是完整的語句,我們可以直接使用/system/bin/wpa_cli -iwlan0 -p /data/misc/wifi/sockets進入wifi命令模式,如下圖所示,wifi命令模式下可以直接使用scan,status等指令

成功連上了TE-NonSignal的wifi,你可能會納悶,怎麼執行enable_network 0就連上了呢?手機怎麼知道network 0是什麼鬼呢?上面說了有個配置文件meta_wpa_supplicant.conf,有了這個配置文件就會自動連接TE-NonSignal網路了。

上面是使用配置文件去連接網路,當然我們也可以用命令行去連接網路啦
執行scan
然後執行scan_result,下圖為掃描結果

例如我們要連個公共網路OPPO-SZ,首先我們執行
add_network 如下圖返回4,說明接下來要連接的network的id為4

依次執行
set_network 4 ssid "OPPO-SZ"
set_network 4 key_mgmt NONE
enable_network 4
如下圖,說明成功連接上wifi了

C. Android WiFi掃描

Wifi scanning overview

必須許可權如下:

除必須許可權外,根據系統版本,還有不同的限制。具體如下

WifiManager.getScanResults() 方法的調用必須具備以下 任一 許可權:

否則會拋異常 SecurityException 。

WifiManager.startScan() 方法的調用必須滿足以下 所有 條件:

否則會拋異常 SecurityException 。

Android對 WifiManager.startScan() 的調用頻率進行了限制。對於超過此頻率的介面訪問, WifiManager 不會執行完整掃描,而是提供上次掃描所緩存的結果。

平均值:2211

wifi掃描有兩個必須許可權:

另外,隨著Android系統的升級,對WiFi掃描做了越來越嚴格的限制。系統對 WifiManager.getScanResults() 和 WifiManager.startScan() 所做的限制不太一樣,但若要實現一個完整的WiFi掃描,就需要「掃描+獲取」兩個步驟,因此綜合來看,WiFi掃描的行為變化如下:

需要同時滿足以下所有條件:

<font color='red'>注意:以上是官方文檔的說明,與實際測試的結果有出入,可能是手機廠商修改rom導致。</font>

(小米MIX2 8.0,三星N9600 8.1.0下,不開定位服務也能獲取到WiFi列表)

D. android開發怎麼判斷wifi信號強度

通過WifiManager的方法getScanResults()獲取List<ScanResult>的集合,ScanResult.level就是信號強度是個負數,然後使用
WifiManager.calculateSignalLevel(scanResult.level,
100);就可得到確定的信號強度(calculateSignalLevel為計算信號等級函數,MAX_RSSI和MIN_RSSI分別為最強和最弱信號強度等級的信號強度閥值)。

閱讀全文

與androidwifiscan相關的資料

熱點內容
大尺度床戲多的電影 瀏覽:395
台灣性電影 瀏覽:942
華為手機聊天加密軟體 瀏覽:833
台灣電影愛情片他女朋友死了 瀏覽:813
電影音樂下載 瀏覽:158
池恩瑞的作品 瀏覽:912
澳門電影免費觀看網站大全 瀏覽:242
電腦多組命令 瀏覽:806
abkdb編譯 瀏覽:710
尺度計演算法大全 瀏覽:926
單片機開發板的作用 瀏覽:331
唯美愛情動作電影在線觀看 瀏覽:574
老電影農村片 瀏覽:303
netbeansclinux 瀏覽:181
不可能的世界小說免費閱讀 瀏覽:272
法國啄木鳥絲襪電影 瀏覽:307
動作片愛情在線免費觀看 瀏覽:1002
騰飛投資理財分紅源碼 瀏覽:854
windows打開埠命令 瀏覽:93