ANDROID---WIFI插件

来源:互联网 发布:日本兵战斗力知乎 编辑:程序博客网 时间:2024/05/22 12:47

实现功能:实现对WIFI的简单管理,如打开、关闭以及查看WIFI的状态。

 

1.     首先了解wifi有哪几种状态

WIFI_STATE_DISABLING(0):正在关闭

WIFI_STATE_DISABLED(1):已经关闭

WIFI_STATE_ENABLING(2):正在打开

WIFI_STATE_ENABLED(3):已经打开

WIFI_STATE_UNKNOWN(4):未知状态


2. 创建插件WiFiPlugin

package com.em.wifiplugin;import org.json.JSONArray;import org.json.JSONException;import org.json.JSONObject;import android.content.Context;import android.net.wifi.WifiManager;import android.util.Log;import com.phonegap.api.Plugin;import com.phonegap.api.PluginResult;import com.phonegap.api.PluginResult.Status;/** * 实现 管理wifi的功能 * 暂时实现的action功能有:打开、关闭以及查看 * @author yeliping * */public class WiFiPlugin extends Plugin{//定义三个actionpublic final static String OPEN_ACTION = "openWifi";public final static String CLOSE_ACTION = "closeWifi";public final static String CHECK_ACTION = "checkWifi";@Overridepublic PluginResult execute(String action, JSONArray data, String callbackId) {PluginResult pluginResult = null;if(OPEN_ACTION.equals(action) || CLOSE_ACTION.equals(action) || CHECK_ACTION.equals(action)){//业务处理WifiManager wifiManager = null;if(OPEN_ACTION.equals(action)){//wifiManager实时获取,以保证数据同步wifiManager = (WifiManager)this.ctx.getSystemService(Context.WIFI_SERVICE);wifiManager.setWifiEnabled(true);}else if(CLOSE_ACTION.equals(action)){wifiManager = (WifiManager)this.ctx.getSystemService(Context.WIFI_SERVICE);wifiManager.setWifiEnabled(false);}else if(CHECK_ACTION.equals(action)){wifiManager = (WifiManager)this.ctx.getSystemService(Context.WIFI_SERVICE);}JSONObject jsonObject = new JSONObject();try {jsonObject.put("state", wifiManager.getWifiState());jsonObject.put("enable", wifiManager.isWifiEnabled());pluginResult = new PluginResult(Status.OK, jsonObject);} catch (JSONException e) {e.printStackTrace();pluginResult = new PluginResult(Status.JSON_EXCEPTION);}}else{//无效的action操作pluginResult = new PluginResult(Status.INVALID_ACTION);Log.d("WiFiPlugin", "invalid action:"+action);}return pluginResult;}   }

在插件中定义了三个action,分别对应此插件要实现的三个功能open、close、check;

使用this.ctx.getSystemService(Context.WIFI_SERVICE);方法获取到wifi管理对象WifiManager,对wifi的任何操作都是由它进行。匹对action后,通过wifiManager.setWifiEnabled(true/false)来打开、关闭wifi。此时,需要注意的是,WifiManager这个对象必须在操作前实时获取以保证数据的同步,否则在运行中会抛异常。

Execute方法返回一个PluginResult对象:

在应用程序调用的action在插件中没有与之匹配的

---ànew PluginResult(Status.INVALID_ACTION);

在业务操作异常

---ànew PluginResult(Status.JSON_EXCEPTION);

操作成功

---ànewPluginResult(

Status.OK, jsonObject) ,jsonObject是返回到应用程序的数据;

3.   新建WifiApp phonegap应用

将WiFiPlugin插件打包为wifiManagement.jar并build path;

在res/xml/plugins.xml定义

<plugin name="WifiPlugin" value="com.em.wifiplugin.WiFiPlugin"></plugin>

4.   新建wifimanagement.js,定义插件类,指明调用的action

/** * 定义插件类,指明调用的action * */var myWifi = {wifiApp : function(action,params,successCallback,failureCallback){var str =  action+'Wifi';//调用phonegap.exec方法return PhoneGap.exec(successCallback,failureCallback,'WifiPlugin',str,[params]);}};

5.     新建app.js,调用插件类

function wifiMana(action){ myWifi.wifiApp(action,null,function(r){printResult(r);},function(e){alert(e);log(e);}); } //打印结果function printResult(fileInfo){    var wifistate = fileInfo.state;var str = "";if(wifistate == 0){str = "WIFI正在关闭...";}else if(wifistate == 1){str = "WIFI已经关闭";}else if(wifistate == 2){str = "WIFI正在开启...";}else if(wifistate == 3){str = "WIFI已经开启";}else if(wifistate == 4){str = "WIFI处于未知状态...";}Ext.Msg.alert('',str);}   

6.     按钮注册点击事件

items: [        {                    xtype:'button',                    text:'startWifi',                    handler: function(){                             wifiMana('open');                    }                     },                     {                     xtype:'button',                     text:'closeWifi',                     handler: function(){                              wifiMana('close');                     }                      },                      {                                          xtype:'button',                       text:'checkWifi',                       handler: function(){                             wifiMana('check');                       }                      }]