cordova wifi插件(cordova plugin add cordova-plugin-hotspot)

本文实现的功能:

1.一键切换wifi状态,打开或关闭

2.输入SSID和密码,连接wifi

3.wifi打开时显示当前可用的wifi,但是还未实现点击SSID名连接wifi的功能

4.桌面实现当前wifi状态

具体的功能界面如图所示(wifi列表中SSID后面显示的是MAC)

功能实现过程(除去新建cordova项目的过程):

1.安装wifi插件

           在http://cordova.apache.org/plugins/?q=wifi&platforms=cordova-android网页中查找wifi插件,找到一个符合自己要求的

            安装此插件命令:cordova plugin add cordova-plugin-hotspot

2.开始编写程序

            2.1 在HTML中添加如下代码:(这是<body>中的全部代码,其中蓝色部分是自己添加的代码)

<body>
        <div class="app">
            <h1>Apache Cordova</h1>
            <div id="deviceready" class="blink">
                <p class="event listening">Connecting to Device</p>
                <p class="event received">Device is Ready</p>
                SSID:<input type='text' id='accountText'><br>
                PAWD:<input type='password' id='passwordText'><br>
                <input type='button' id='openWIFI' value='打开wifi'></button>
                <button id='testbutton'>测试按钮</button>
                <button id='connectWIFI'>连接wifi</button>
                <p id='dispWifiStatus'></p>
                <p id='dispWifiSSID'></p>
            </div>
        </div>
        <script type="text/javascript" src="cordova.js"></script>
        <script type="text/javascript" src="js/index.js"></script>
    </body>
           添加一个<TEXT>用于输入SSID,添加一个<PASSWORD>用于输入密码

           添加一个打开/关闭按钮,一个连接wifi按钮

           注:其中的测试按钮用于测试工程和执行,对最后的结果无影响,只是在调试过程中比较方便

      

           2.2编写JavaScript脚本程序,此程序中注释写的比较详细,在此就不一一阐述,蓝色的是自己添加的代码:

var app = {
    // Application Constructor
    initialize: function() {
        document.addEventListener('deviceready', this.onDeviceReady.bind(this), false);
    },

    // deviceready Event Handler
    //
    // Bind any cordova events here. Common events are:
    // 'pause', 'resume', etc.
    onDeviceReady: function() {
        this.receivedEvent('deviceready');

        document.getElementById('testbutton').addEventListener('click',testFunc)
        //注册连接wifi按钮的事件监听
        document.getElementById('connectWIFI').addEventListener('click',connectWifi)
        //打开wifi
        document.getElementById('openWIFI').addEventListener('click',openWifi); 
        checkWifiStatus();  //启动APP时自动检测wifi状态,若为打开状态,则全部操作为关闭做准备,反之
    },

    // Update DOM on a Received Event
    receivedEvent: function(id) {
        var parentElement = document.getElementById(id);
        var listeningElement = parentElement.querySelector('.listening');
        var receivedElement = parentElement.querySelector('.received');

        listeningElement.setAttribute('style', 'display:none;');
        receivedElement.setAttribute('style', 'display:block;');

        console.log('Received Event: ' + id);
    }
};

app.initialize();

function testFunc(){
    alert('测试信息\n输出则表示新建工程正常');
}

function checkWifiStatus(){//开启APP时检测wifi状态函数
    cordova.plugins.hotspot.isWifiOn(successCB, errorCB);
    function successCB(info){//此信息中包含wifi状态信息,若为true,则表示当前wifi为开启状态,则系统为关闭wifi做准备,反之
        if(info==true)
        {
            document.getElementById('openWIFI').value='关闭wifi';
            document.getElementById('dispWifiStatus').innerHTML='wifi已开启';
        }    
        else
        {
            document.getElementById('openWIFI').value='打开wifi';
            document.getElementById('dispWifiStatus').innerHTML='wifi已关闭';
        } 
        showWifiSSID(info);
    }
    function errorCB(){

    }
}

function connectWifi(){
    var account=document.getElementById('accountText');//读wifi名text句柄(自己暂且叫句柄)
    var pass=document.getElementById('passwordText');//读密码句柄
    cordova.plugins.hotspot.connectToWifi(account.value,pass.value,successCB,errorCB)//将帐号密码写入函数中,函数自动进行连接
    function successCB(fs){//此回调函数(产生的信息),显示是否连接成功
        //alert('contect success');
    }

    function errorCB(fs){//若连接失败,此函数会发出信息
        //alert('contect fail:'+fs.code);
    }
}

function openWifi(){//改变wifi状态,每按一次按钮取反一次
    cordova.plugins.hotspot.toggleWifi(wifiStatus, errorCB);//取反函数,第一个参数可返回状态信息,若打开了wifi则返回true,反之false
    function wifiStatus(info){//判断返回的信息,若为true说明此次动作是打开wifi,则相应的把按钮值变成‘关闭’字样,以便提示用户关闭wifi
        //alert(info);//反之则相反
        if(info==true)
        {
            document.getElementById('openWIFI').value='关闭wifi';
            document.getElementById('dispWifiStatus').innerHTML='wifi已开启';
        }    
        else
        {
            document.getElementById('openWIFI').value='打开wifi';
            document.getElementById('dispWifiStatus').innerHTML='wifi已关闭';
        } 
        showWifiSSID(info);
    }

    function errorCB(fs){//若出现意外无法正常打开/关闭wifi,则提示出错,并返回错误信息
        alert('打开wifi失败\n'+fs.code);
    }
}

function showWifiSSID(wifiStatus){//若当前wifi为打开状态,则显示可用的SSID
    cordova.plugins.hotspot.scanWifi(SSIDlist, errorCB);//扫描当前可用WIFI,此函数第一个参数返回的信息是一个包含 [SSID, BSSID, frequency, level, timestamp, capabilities]
                                                        //这六个属性的对象数组,使用时需解析出来每个属性,解析方法如下
    function SSIDlist(info){//解析读出来的SSID并显示出来,解析过程如下
        var str=new String;//新建一个字符串,用来存放格式后的SSID(每个SSID换行后显示下一个)
        for(var i=0;i<info.length;i++)//做一个循环,循环次数为扫描出来的对象个数,
        {
            str=str+info[i].SSID+''+info[i].BSSID+'<br>';//格式化字符串,info[i].SSID,先从对象数组中提取元素,然后点操作提取对象中的属性SSID
        }                               //之后添加一个<br>,因为是要显示在<p>中,属于直接往HTML中放一个字符串,所以要用<br>,不能用‘/n’
        if(wifiStatus==true)//此参数为总函数的输入参数,用来判断当前的wifi状态,如果当前wifi为打开状态,则显示SSID列表,
        {                   //如果为关闭状态,则不显示
            document.getElementById('dispWifiSSID').innerHTML=str;//用格式化后的字符串替换<p>中的内容
            //alert(str);
        } 
        else
        {
            document.getElementById('dispWifiSSID').innerHTML='';//如果wifi状态为为关,则显示为空
        }
        
    } 
    function errorCB(){

    } 
}
            本文学习时应该注意结合上述网站中给出的插件手册学习,插件中只有函数,并没有给出实际的使用例子,本人也是新手,结合手册中的运行还有本文中的例子,尤其注意其中的回调函数和函数参数的使用方法,根据这几个例子扩展到其他的例子才是学习的好方法。

            希望这篇文章可以帮助到其他的人,也便于自己以后复习,特作此文章,若有问题,或者有需要改正的地方,请联系我

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值