Android wifi范围改变



我在android上开发了一个检查WiFi连接的应用程序。我想知道我的设备是否在某个特定的wifi热点范围内。我可以使用下面的代码来获取可用的wifi热点列表。

List<android.net.wifi.ScanResult> mScanResults = myWifiManager.getScanResults();

但就我而言,我们的办公室很大,有很多wifi热点。所以我连接到wifi_hp_1并移动,然后当我到达wifi_hp_2时,扫描没有发生。我已经为

注册了一个广播接收器
ConnectivityManager.CONNECTIVITY_ACTION

但是扫描没有发生,如果我在热点1的范围内并且到达了热点2的范围,但是热点1的信号仍然可用。

有什么帮助吗?

在我们的应用程序中是这样处理的:

private WifiManager wifi;
private BroadcastReceiver wifiReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (wifi.isWifiEnabled()) {
            ConnectivityManager mgr = (ConnectivityManager)getSystemService(CONNECTIVITY_SERVICE);
            NetworkInfo info = mgr.getActiveNetworkInfo();
            if (info == null) {
                scanForWiFiNetworks();
                setScanningEnabled(true);
            } else if (!info.getState().equals(NetworkInfo.State.CONNECTED)) {
                setScanningEnabled(false);
                scanForWiFiNetworks();
            } else {
                scanForWiFiNetworks();
                setScanningEnabled(true);
            }
        }
    }
};
private BroadcastReceiver wifiStateReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (wifi.isWifiEnabled()) {
            setScanningEnabled(false);
            scan.sendEmptyMessageDelayed(0, 2500);
        }
    }
};
private Handler scan = new Handler() {
    @Override
    public void handleMessage(Message msg) {
        super.handleMessage(msg);
        setScanningEnabled(false);
        scanForWiFiNetworks();
    }
};
private Handler reenableScanning = new Handler() {
    public void handleMessage(Message msg) {
        reenableScanning.removeCallbacksAndMessages(null);
        setScanningEnabled(true);
    };
};
private void scanForWiFiNetworks() {
    setScanningEnabled(false);
    mapConnections = new HashMap<String, String>();
    btnConnect.setEnabled(false);
    btnForget.setEnabled(false);
    btnUpdate.setEnabled(false);
    checkWiFiState();
    List<ScanResult> results = wifi.getScanResults();
    WifiInfo connectedWiFi = wifi.getConnectionInfo();
    String connected = "";
    ArrayList<String> listDupeCheck = new ArrayList<String>();
    String[] listResults = new String[0];
    ArrayList<String> list = new ArrayList<String>();
    for (int i = 0; i < results.size(); i++) {
        if (!listDupeCheck.contains(results.get(i).SSID)) {
            if (connectedWiFi.getSSID() != null) {
                if ((connectedWiFi.getSSID().equalsIgnoreCase(results.get(i).SSID) || connectedWiFi.getSSID().equalsIgnoreCase(
                        """ + results.get(i).SSID + """))
                        && connectedWiFi.getSupplicantState().equals(SupplicantState.COMPLETED)) {
                    connected = "; " + GlobalVars.getMessageText(1159);// Connected
                } else {
                    connected = "";
                }
            } else {
                connected = "";
            }
            String connectionInfo = getMessageText(171) + ": " + results.get(i).SSID + ", " + getMessageText(1160) + ": "
                    + results.get(i).capabilities + connected;
            list.add(connectionInfo);
            mapConnections.put(connectionInfo, results.get(i).SSID);
            listDupeCheck.add(results.get(i).SSID);
        }
    }
    listResults = list.toArray(listResults);
    scan.removeCallbacksAndMessages(null);
    setScanningEnabled(true);
}
在onCreate()中:
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
    IntentFilter wifiState = new IntentFilter(WifiManager.WIFI_STATE_CHANGED_ACTION);
    this.registerReceiver(wifiReceiver, filter);
    this.registerReceiver(wifiStateReceiver, wifiState);
    wifi = (WifiManager)getSystemService(Context.WIFI_SERVICE);
}

最新更新