簡體   English   中英

Android與CaptiveNetwork API(iOS)等效嗎?

[英]What is the Android equivalent of the CaptiveNetwork API (iOS)?

我希望注冊用戶連接到WiFi網絡並進行無縫身份驗證。 當用戶正在運行應用程序並且檢測到特定的SSID時,應該會發生這種情況。

CaptiveNetwork編程接口允許應用程序與Captive Network Support交互,Captive Network Support是負責在提供Internet訪問之前檢測需要用戶交互的網絡的系統組件。 這些網絡是機場和酒店等公共場所中最常見的WiFi熱點。

請參閱: https//developer.apple.com/library/ios/documentation/SystemConfiguration/Reference/CaptiveNetworkRef/index.html

首先,您必須檢查網絡是否可用

wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
        if (!wifiManager.isWifiEnabled()) {
            wifiManager.setWifiEnabled(true);
        }
            wifiResultsReceiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                context.unregisterReceiver(wifiResultsReceiver);
                List<ScanResult> wifiList;
                wifiList = wifiManager.getScanResults();
                for (int i = 0; i < wifiList.size(); i++) {
                    String[] networkInfo = wifiList.get(i).toString().split(",");
                    if (networkInfo[0].trim().equals(YOUR_SSID)) {
                       //Check if your ssid is available &
                        connect();
                    }
            }
        };
        context.registerReceiver(wifiResultsReceiver, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));

        wifiManager.startScan();

然后,如果網絡可用,則可以連接到您的SSID(這是我的配置之一):

public static WifiConfiguration getConnectionConfig(Context context, String ssidName) {
        Validator.validateArgument(context, "Context can't be null");
        WifiManager wifiManager = (WifiManager) context.getSystemService(context.WIFI_SERVICE);
        if (!wifiManager.isWifiEnabled()) wifiManager.setWifiEnabled(true);
        WifiConfiguration wifiConfig = new WifiConfiguration();
        wifiConfig.SSID = ssidName;
        List<WifiConfiguration> curentList = wifiManager.getConfiguredNetworks();
        if (curentList != null && !curentList.isEmpty()) {
            curentList.removeAll(Collections.singleton(null));
            for (int i = 0; i < curentList.size(); i++) {
                WifiConfiguration item = curentList.get(i);
                if (ssidName.equals(item.SSID)) {
                    wifiManager.removeNetwork(item.networkId);
                }
            }
        }
        wifiConfig.status = WifiConfiguration.Status.DISABLED;
        wifiConfig.priority = 100;
        wifiConfig.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
        wifiConfig.allowedProtocols.set(WifiConfiguration.Protocol.RSN);
        wifiConfig.allowedProtocols.set(WifiConfiguration.Protocol.WPA);
        wifiConfig.allowedAuthAlgorithms.clear();
        wifiConfig.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
        wifiConfig.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
        wifiConfig.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40);
        wifiConfig.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP104);
        wifiConfig.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
        wifiConfig.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
        return wifiConfig;
    }

private void connect() {
wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
int networkID = wifiManager.addNetwork(getConnectionConfig(context, YOUR_SSID));
     wifiManager.disconnect();
     wifiManager.enableNetwork(networkID, true);
     wifiManager.reconnect();
}

不要忘記在AndroidManifest上添加權限

PS:三星設備在4.4和早期版本的SSID掃描中存在一些問題,請小心。 PPS:對於身份驗證,您必須對AP連接使用特定的配置(以我為例)。 問候

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM