实现功能:实现对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{
//定义三个action
public final static String OPEN_ACTION = "openWifi";
public final static String CLOSE_ACTION = "closeWifi";
public final static String CHECK_ACTION = "checkWifi";
@Override
public 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');
}
}]