WIFI
. 首先了解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;
- }
- }
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>
<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]
- );
- }
- };
/** * 定义插件类,指明调用的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);
- }
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');
- }
- }]
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'); } }]