native.js 安卓自动连接制定名称和密码的wifi

来源:互联网 发布:唱给自己的歌网络战队 编辑:程序博客网 时间:2024/06/05 09:46
(function($, doc) {
    $.init({
        //通知栏的颜色
        statusBarBackground: '#f7f7f7'
    });
    $.plusReady(function() {
        document.getElementById("test_button").addEventListener("tap", function() {
            function judgePlatform() {
                switch(plus.os.name) {
                    case "Android":
                        // Android平台: plus.android.*
                        androidOpenWifi(); //通常需要3~5秒
                        loadWifiInfo();
                        break;
                    case "iOS":
                        // iOS平台: plus.ios.*
                        break;
                    default:
                        // 其它平台
                        break;
                }
            }

        });

        //监听每一个ul下的li事件
        mui(".mui-table-view").on('tap', '.mui-table-view-cell', function() {
            var ssid = this.firstChild.innerHTML;
            console.log("获取到的SSID:" + ssid);

            function judgePlatform() {
                switch(plus.os.name) {
                    case "Android":
                        // Android平台: plus.android.*
                        androidWifiConnection("FGJSB", "fuguangjsb14", "wpa"); //
                        break;
                    case "iOS":
                        // iOS平台: plus.ios.*
                        break;
                    default:
                        // 其它平台
                        break;
                }
            }
        });
    });
}(mui, document));

/**
 * 获取安卓的wifi列表
 */
function loadWifiInfo() {
    // 主窗体
    var MainActivity = plus.android.runtimeMainActivity()
    // 上下文
    var Context = plus.android.importClass('android.content.Context')
    // 导入WIFI管理 和 WIFI 信息 的class
    plus.android.importClass("android.net.wifi.WifiManager")
    plus.android.importClass("android.net.wifi.WifiInfo")
    plus.android.importClass("android.net.wifi.ScanResult")
    plus.android.importClass("java.util.ArrayList")
    // 获取 WIFI 管理实例
    var wifiManager = MainActivity.getSystemService(Context.WIFI_SERVICE)

    // 获取当前连接WIFI的信息
    var info = wifiManager.getConnectionInfo();
    console.log("当前连接的wifi的信息是:" + info);
    // 获取当前 WIFI 连接的 SSID (WIFI 名称)
    //var ssid = info.getSSID()
    // 这里的 获取到的名称 是 带 双引号的 如 "cmcc"  
    // 所以我们这里处理一下
    //ssid = ssid.replace(/(^\"*)|(\"*$)/g, "")
    var resultList = wifiManager.getScanResults();
    var list = "";
    var ul = document.getElementById("wifiList");
    for(var i = 0; i < resultList.size(); i++) {
        var sSID = resultList.get(i).plusGetAttribute('SSID')
        if(sSID != "") {
            list += '<li class="mui-table-view-cell"><p>' + sSID + '</p></li>';
        }
    }
    ul.innerHTML = list;
}

/**
 * 打开安卓的wifi模块
 */
function androidOpenWifi() {
    var bRet = false;
    var MainActivity = plus.android.runtimeMainActivity()
    var Context = plus.android.importClass('android.content.Context')
    plus.android.importClass("android.net.wifi.WifiManager")
    plus.android.importClass("android.net.wifi.WifiInfo")
    var wifiManager = MainActivity.getSystemService(Context.WIFI_SERVICE)
    if(!wifiManager.isWifiEnabled()) {
        bRet = wifiManager.setWifiEnabled(true); //返回自动打开的结果
        console.log("打开wifi的返回结果是" + bRet)
    } else {
        bRet = true;
        console.log("wifi原本已经打开")
    }
    return bRet;
}

/**
 * 安卓自动连接wifi,根据制定的ssid
 * @param {Object} ssid 名称
 * @param {Object} password 密码
 * @param {Object} type 加密方式
 */
function androidWifiConnection(ssid, password, type) {

    var MainActivity = plus.android.runtimeMainActivity();
    var Context = plus.android.importClass('android.content.Context');
    plus.android.importClass("android.net.wifi.WifiManager");
    plus.android.importClass("android.net.wifi.WifiInfo");
    plus.android.importClass("android.net.wifi.WifiConfiguration");
    var wifiManager = MainActivity.getSystemService(Context.WIFI_SERVICE);

    //WifiConfiguration
    var wifiConfig = androidCreateWifiInfo(ssid, password, type);
    //
    if(wifiConfig == null) {
        console.log("wifiConfig is null!")
        return;
    }

    //WifiConfiguration
    var WifiConfiguration = tempConfig = isExsitsAndroid(ssid);

    if(tempConfig != null) {
        console.log("删除原来连接的wifi" + tempConfig);
        wifiManager.removeNetwork(tempConfig.plusGetAttribute('networkId'));
    }
    //int
    console.log("要连接的新的wifi配置:" + wifiConfig)
    var netID = wifiManager.addNetwork(wifiConfig);
    console.log(netID);
    //boolean
    var enabled = wifiManager.enableNetwork(netID, true);
    console.log("enableNetwork status enable=" + enabled)
    // boolean
    var connected = wifiManager.reconnect();
    console.log("enableNetwork connected=" + connected)
}

/**
 * 查看以前是否也配置过这个网络
 */
function isExsitsAndroid(sSID) {
    console.log("查看以前是否也配置过这个网络" + sSID);
    //WifiConfiguration
    var MainActivity = plus.android.runtimeMainActivity();
    var Context = plus.android.importClass('android.content.Context');
    plus.android.importClass("android.net.wifi.WifiManager");
    plus.android.importClass("android.net.wifi.WifiInfo");
    var List = plus.android.importClass("java.util.List");
    var ArrayList = plus.android.importClass("java.util.ArrayList");
    var wifiManager = MainActivity.getSystemService(Context.WIFI_SERVICE);
    //
    var existingConfigs = new ArrayList();
    existingConfigs = wifiManager.getConfiguredNetworks();
    if(existingConfigs.size() != 0) {
        for(var i = 0; i < existingConfigs.size(); i++) {
            if(existingConfigs.get(i).plusGetAttribute('SSID') == ("\"" + sSID + "\"")) {
                console.log("该制定的ssid存在于配置中:" + sSID);
                return existingConfigs.get(i);
            }
        }
    }
    console.log("该ssid没有配置过")
    return null;
}

/**
 * 创建wifi配置对象
 * @param {Object} SSID
 * @param {Object} Password
 * @param {Object} Type
 */
function androidCreateWifiInfo(SSID, Password, Type) {
    plus.android.importClass("java.util.BitSet");
    var WifiConfiguration = plus.android.importClass("android.net.wifi.WifiConfiguration");
    var config = new WifiConfiguration();
    config.plusGetAttribute('allowedAuthAlgorithms').clear();
    config.plusGetAttribute('allowedGroupCiphers').clear();
    config.plusGetAttribute('allowedKeyManagement').clear();
    config.plusGetAttribute('allowedPairwiseCiphers').clear();
    config.plusGetAttribute('allowedProtocols').clear();
    config.plusSetAttribute('SSID', "\"" + SSID + "\"");
    // nopass
    if(Type == "nopass") {
        config.plusSetAttribute(wepKeys[0], "");
        config.plusGetAttribute('allowedKeyManagement').set(WifiConfiguration.KeyMgmt.NONE);
        config.plusSetAttribute('wepTxKeyIndex', 0);
    }
    // wep
    if(Type == "wep") {
        if(!Password != "") {
            if(isHexWepKey(Password)) {
                config.plusSetAttribute(wepKeys[0], Password);
            } else {
                config.plusSetAttribute(wepKeys[0], "\"" + Password + "\"");
            }
        }
        config.allowedAuthAlgorithms.set(AuthAlgorithm.OPEN);
        config.allowedAuthAlgorithms.set(AuthAlgorithm.SHARED);
        config.allowedKeyManagement.set(KeyMgmt.NONE);
        config.plusSetAttribute('wepTxKeyIndex', 0);
    }
    // wpa
    if(Type == "wpa") {
        config.plusSetAttribute('preSharedKey', "\"" + Password + "\"");
        config.plusSetAttribute('hiddenSSID', true);

        config.plusGetAttribute('allowedAuthAlgorithms').set(WifiConfiguration.AuthAlgorithm.OPEN);
        config.plusGetAttribute('allowedGroupCiphers').set(WifiConfiguration.GroupCipher.TKIP);
        config.plusGetAttribute('allowedKeyManagement').set(WifiConfiguration.KeyMgmt.WPA_PSK);
        config.plusGetAttribute('allowedPairwiseCiphers').set(WifiConfiguration.PairwiseCipher.TKIP);
        // 此处需要修改否则不能自动重联
        //config.plusGetAttribute('allowedProtocols').set(WifiConfiguration.Protocol.WPA);
        config.plusGetAttribute('allowedGroupCiphers').set(WifiConfiguration.GroupCipher.CCMP);
        config.plusGetAttribute('allowedPairwiseCiphers').set(WifiConfiguration.PairwiseCipher.CCMP);
        config.plusSetAttribute('status', WifiConfiguration.Status.ENABLED);
    }
    return config;
}

//-------------------------ios代码
原创粉丝点击