Android 连接Wifi和创建Wifi热点的实例

Android 连接Wifi和创建Wifi热点的实例,第1张

概述本文实例讲述了连接Wifi和创建Wifi热点的方法。分享给大家供大家参考,具体如下:

本文实例讲述了连接Wifi和创建Wifi热点的方法。分享给大家供大家参考,具体如下:

androID的热点功能不可见,用了反射的技术搞定之外。 

Eclipse设置语言为utf-8才能查看中文注释

上代码:

MainActivity.java

package com.Widget.hotspot; import androID.os.Bundle; import androID.app.Activity; import androID.content.broadcastReceiver; import androID.content.Context; import androID.content.Intent; import androID.content.IntentFilter; import androID.util.Log; import androID.vIEw.Menu; import androID.vIEw.VIEw; import androID.Widget.button;  public class MainActivity extends Activity {    public static final String TAG = "MainActivity";      private button mBtn1,mBtn2;      private Wifiadmin mWifiadmin;      private Context mContext = null;   @OverrIDe   protected voID onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);          mContext = this;          setContentVIEw(R.layout.activity_main);          mBtn1 = (button)findVIEwByID(R.ID.button1);     mBtn2 = (button)findVIEwByID(R.ID.button2);     mBtn1.setText("点击连接Wifi");     mBtn2.setText("点击创建Wifi热点");     mBtn1.setonClickListener(new button.OnClickListener() {              @OverrIDe       public voID onClick(VIEw v) {         // Todo auto-generated method stub          mWifiadmin = new Wifiadmin(mContext) {                      @OverrIDe           public voID myUnregisterReceiver(broadcastReceiver receiver) {             // Todo auto-generated method stub             MainActivity.this.unregisterReceiver(receiver);           }                      @OverrIDe           public Intent myRegisterReceiver(broadcastReceiver receiver,IntentFilter filter) {             // Todo auto-generated method stub             MainActivity.this.registerReceiver(receiver,filter);             return null;           }                      @OverrIDe           public voID onNotifyWifiConnected() {             // Todo auto-generated method stub             Log.v(TAG,"have connected success!");             Log.v(TAG,"###############################");           }                      @OverrIDe           public voID onNotifyWifiConnectFailed() {             // Todo auto-generated method stub             Log.v(TAG,"have connected Failed!");             Log.v(TAG,"###############################");           }         };         mWifiadmin.openWifi();         mWifiadmin.addNetwork(mWifiadmin.createWifiInfo("YOU_WIFI","MM123456",Wifiadmin.TYPE_WPA));                }     });          mBtn2.setonClickListener(new button.OnClickListener() {              @OverrIDe       public voID onClick(VIEw v) {         // Todo auto-generated method stub                  WifiApadmin wifiAp = new WifiApadmin(mContext);         wifiAp.startWifiAp("\"HotSpot\"","hhhhhh123");       }     });        }    @OverrIDe   public boolean onCreateOptionsMenu(Menu menu) {     // Inflate the menu; this adds items to the action bar if it is present.     getMenuInflater().inflate(R.menu.activity_main,menu);     return true;   }     @OverrIDe     public voID onResume() {       super.onResume();              Log.d("RSSi","Registered");     }      @OverrIDe     public voID onPause() {       super.onPause();              Log.d("RSSi","Unregistered");     }    } 

Wifiadmin.java

package com.Widget.hotspot;  import java.util.List; import java.util.Timer; import java.util.TimerTask; import androID.content.broadcastReceiver; import androID.content.Context; import androID.content.Intent; import androID.content.IntentFilter; import androID.net.ConnectivityManager; import androID.net.NetworkInfo; import androID.net.NetworkInfo.DetailedState; import androID.net.wifi.ScanResult; import androID.net.wifi.WifiConfiguration; import androID.net.wifi.WifiInfo; import androID.net.wifi.WifiManager; import androID.net.wifi.WifiManager.WifiLock; import androID.util.Log;   public abstract class Wifiadmin {      private static final String TAG = "Wifiadmin";      private WifiManager mWifiManager;   private WifiInfo mWifiInfo;   // 扫描出的网络连接列表   private List<ScanResult> mWifiList;   private List<WifiConfiguration> mWifiConfiguration;    private WifiLock mWifiLock;      private String mPasswd = "";   private String mSSID = "";      private Context mContext = null;    public Wifiadmin(Context context) {          mContext = context;          // 取得WifiManager对象     mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);     // 取得WifiInfo对象     mWifiInfo = mWifiManager.getConnectionInfo();          Log.v(TAG,"getIpAddress = " + mWifiInfo.getIpAddress());   }    // 打开WIFI   public voID openWifi() {     if (!mWifiManager.isWifIEnabled()) {       mWifiManager.setWifIEnabled(true);     }   }    // 关闭WIFI   public voID closeWifi() {     if (mWifiManager.isWifIEnabled()) {       mWifiManager.setWifIEnabled(false);     }   }    public abstract Intent myRegisterReceiver(broadcastReceiver receiver,IntentFilter filter);      public abstract voID myUnregisterReceiver(broadcastReceiver receiver);      public abstract voID onNotifyWifiConnected();      public abstract voID onNotifyWifiConnectFailed();      // 添加一个网络并连接   public voID addNetwork(WifiConfiguration wcg) {          register();          WifiApadmin.closeWifiAp(mContext);          int wcgID = mWifiManager.addNetwork(wcg);     boolean b = mWifiManager.enableNetwork(wcgID,true);   }      public static final int TYPE_NO_PASSWD = 0x11;   public static final int TYPE_WEP = 0x12;   public static final int TYPE_WPA = 0x13;      public voID addNetwork(String ssID,String passwd,int type) {     if (ssID == null || passwd == null || ssID.equals("")) {       Log.e(TAG,"addNetwork() ## nullpointer error!");       return;     }          if (type != TYPE_NO_PASSWD && type != TYPE_WEP && type != TYPE_WPA) {       Log.e(TAG,"addNetwork() ## unkNown type = " + type);     }          stopTimer();     unRegister();          addNetwork(createWifiInfo(ssID,passwd,type));   }    private broadcastReceiver mbroadcastReceiver = new broadcastReceiver() {      @OverrIDe     public voID onReceive(Context context,Intent intent) {       // Todo auto-generated method stub       if (intent.getAction().equals(WifiManager.RSSI_CHANGED_ACTION)) {         Log.d(TAG,"RSSI changed");                  //有可能是正在获取,或者已经获取了         Log.d(TAG," intent is " + WifiManager.RSSI_CHANGED_ACTION);                  if (isWifiContected(mContext) == WIFI_CONNECTED) {           stopTimer();           onNotifyWifiConnected();           unRegister();         } else if (isWifiContected(mContext) == WIFI_CONNECT_Failed) {           stopTimer();           closeWifi();           onNotifyWifiConnectFailed();           unRegister();         } else if (isWifiContected(mContext) == WIFI_CONNECTING) {                    }       }     }   };      private final int STATE_REGISTRING = 0x01;   private final int STATE_REGISTERED = 0x02;   private final int STATE_UNREGISTERING = 0x03;   private final int STATE_UNREGISTERED = 0x04;      private int mHaveRegister = STATE_UNREGISTERED;   private synchronized voID register() {     Log.v(TAG,"register() ##mHaveRegister = " + mHaveRegister);      if (mHaveRegister == STATE_REGISTRING          || mHaveRegister == STATE_REGISTERED) {       return ;     }          mHaveRegister = STATE_REGISTRING;     myRegisterReceiver(mbroadcastReceiver,new IntentFilter(WifiManager.RSSI_CHANGED_ACTION));     mHaveRegister = STATE_REGISTERED;          startTimer();   }      private synchronized voID unRegister() {     Log.v(TAG,"unRegister() ##mHaveRegister = " + mHaveRegister);          if (mHaveRegister == STATE_UNREGISTERED          || mHaveRegister == STATE_UNREGISTERING) {       return ;     }          mHaveRegister = STATE_UNREGISTERING;     myUnregisterReceiver(mbroadcastReceiver);     mHaveRegister = STATE_UNREGISTERED;   }      private Timer mTimer = null;   private voID startTimer() {     if (mTimer != null) {       stopTimer();     }          mTimer = new Timer(true); //   mTimer.schedule(mTimerTask,20 * 1000);// 20s     mTimer.schedule(mTimerTask,30 * 1000);   }      private TimerTask mTimerTask = new TimerTask() {          @OverrIDe     public voID run() {       // Todo auto-generated method stub       Log.e(TAG,"timer out!");       onNotifyWifiConnectFailed();       unRegister();     }   };      private voID stopTimer() {     if (mTimer != null) {       mTimer.cancel();       mTimer = null;     }   }      @OverrIDe   protected voID finalize() {     try {       super.finalize();       unRegister();     } catch (Throwable e) {       // Todo auto-generated catch block       e.printstacktrace();     }   }      public WifiConfiguration createWifiInfo(String SSID,String password,int type) {          Log.v(TAG,"SSID = " + SSID + "## Password = " + password + "## Type = " + type);          WifiConfiguration config = new WifiConfiguration();     config.allowedAuthAlgorithms.clear();     config.allowedGroupCiphers.clear();     config.allowedKeyManagement.clear();     config.allowedPairwiseCiphers.clear();     config.allowedProtocols.clear();     config.SSID = "\"" + SSID + "\"";      WifiConfiguration tempConfig = this.IsExsits(SSID);     if (tempConfig != null) {       mWifiManager.removeNetwork(tempConfig.networkID);     }          // 分为三种情况:1没有密码2用wep加密3用wpa加密     if (type == TYPE_NO_PASSWD) {// WIFICIPHER_nopASS       config.wepKeys[0] = "";       config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);       config.wepTxKeyIndex = 0;            } else if (type == TYPE_WEP) { // WIFICIPHER_WEP        config.hIDdenSSID = true;       config.wepKeys[0] = "\"" + password + "\"";       config.allowedAuthAlgorithms           .set(WifiConfiguration.AuthAlgorithm.SHARED);       config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);       config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);       config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40);       config.allowedGroupCiphers           .set(WifiConfiguration.GroupCipher.WEP104);       config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);       config.wepTxKeyIndex = 0;     } else if (type == TYPE_WPA) {  // WIFICIPHER_WPA       config.preSharedKey = "\"" + password + "\"";       config.hIDdenSSID = true;       config.allowedAuthAlgorithms           .set(WifiConfiguration.AuthAlgorithm.OPEN);       config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);       config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);       config.allowedPairwiseCiphers           .set(WifiConfiguration.PairwiseCipher.TKIP);       // config.allowedProtocols.set(WifiConfiguration.Protocol.WPA);       config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);       config.allowedPairwiseCiphers           .set(WifiConfiguration.PairwiseCipher.CCMP);       config.status = WifiConfiguration.Status.ENABLED;     }           return config;   }      public static final int WIFI_CONNECTED = 0x01;   public static final int WIFI_CONNECT_Failed = 0x02;   public static final int WIFI_CONNECTING = 0x03;   /**    * 判断wifi是否连接成功,不是network    *    * @param context    * @return    */   public int isWifiContected(Context context) {     ConnectivityManager connectivityManager = (ConnectivityManager) context         .getSystemService(Context.CONNECTIVITY_SERVICE);     NetworkInfo wifiNetworkInfo = connectivityManager         .getNetworkInfo(ConnectivityManager.TYPE_WIFI);          Log.v(TAG,"isConnectedOrConnecting = " + wifiNetworkInfo.isConnectedOrConnecting());     Log.d(TAG,"wifiNetworkInfo.getDetailedState() = " + wifiNetworkInfo.getDetailedState());     if (wifiNetworkInfo.getDetailedState() == DetailedState.OBTAINING_IPADDR         || wifiNetworkInfo.getDetailedState() == DetailedState.CONNECTING) {       return WIFI_CONNECTING;     } else if (wifiNetworkInfo.getDetailedState() == DetailedState.CONNECTED) {       return WIFI_CONNECTED;     } else {       Log.d(TAG,"getDetailedState() == " + wifiNetworkInfo.getDetailedState());       return WIFI_CONNECT_Failed;     }   }      private WifiConfiguration IsExsits(String SSID) {     List<WifiConfiguration> existingConfigs = mWifiManager.getConfigurednetworks();     for (WifiConfiguration existingConfig : existingConfigs) {       if (existingConfig.SSID.equals("\"" + SSID + "\"") /*&& existingConfig.preSharedKey.equals("\"" + password + "\"")*/) {         return existingConfig;       }     }     return null;   }        // 断开指定ID的网络   public voID disconnectWifi(int netID) {     mWifiManager.disableNetwork(netID);     mWifiManager.disconnect();   }      // 检查当前WIFI状态   public int checkState() {     return mWifiManager.getWifiState();   }    // 锁定WifiLock   public voID acquireWifiLock() {     mWifiLock.acquire();   }    // 解锁WifiLock   public voID releaseWifiLock() {     // 判断时候锁定     if (mWifiLock.isHeld()) {       mWifiLock.acquire();     }   }    // 创建一个WifiLock   public voID creatWifiLock() {     mWifiLock = mWifiManager.createWifiLock("Test");   }    // 得到配置好的网络   public List<WifiConfiguration> getConfiguration() {     return mWifiConfiguration;   }    // 指定配置好的网络进行连接   public voID connectConfiguration(int index) {     // 索引大于配置好的网络索引返回     if (index > mWifiConfiguration.size()) {       return;     }     // 连接配置好的指定ID的网络     mWifiManager.enableNetwork(mWifiConfiguration.get(index).networkID,true);   }    public voID startScan() {     mWifiManager.startScan();     mWifiList = mWifiManager.getScanResults();     mWifiConfiguration = mWifiManager.getConfigurednetworks();   }    // 得到网络列表   public List<ScanResult> getWifiList() {     return mWifiList;   }    // 查看扫描结果   public StringBuilder lookUpScan() {     StringBuilder stringBuilder = new StringBuilder();     for (int i = 0; i < mWifiList.size(); i++) {       stringBuilder           .append("Index_" + new Integer(i + 1).toString() + ":");       // 将ScanResult信息转换成一个字符串包       // 其中把包括:BSSID、SSID、capabilitIEs、frequency、level       stringBuilder.append((mWifiList.get(i)).toString());       stringBuilder.append("/n");     }     return stringBuilder;   }    // 得到MAC地址   public String getMacAddress() {     return (mWifiInfo == null) ? "NulL" : mWifiInfo.getMacAddress();   }    // 得到接入点的BSSID   public String getBSSID() {     return (mWifiInfo == null) ? "NulL" : mWifiInfo.getBSSID();   }    // 得到IP地址   public int getIPAddress() {     return (mWifiInfo == null) ? 0 : mWifiInfo.getIpAddress();   }    // 得到连接的ID   public int getNetworkID() {     return (mWifiInfo == null) ? 0 : mWifiInfo.getNetworkID();   }    // 得到WifiInfo的所有信息包   public String getWifiInfo() {     return (mWifiInfo == null) ? "NulL" : mWifiInfo.toString();   } } 

WifiApadmin.java

package com.Widget.hotspot;  import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.Timer; import java.util.TimerTask;  import androID.content.Context; import androID.net.wifi.WifiConfiguration; import androID.net.wifi.WifiManager; import androID.util.Log;  /**  * 创建热点  *  */ public class WifiApadmin {   public static final String TAG = "WifiApadmin";      public static voID closeWifiAp(Context context) {     WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);      closeWifiAp(wifiManager);   }      private WifiManager mWifiManager = null;      private Context mContext = null;   public WifiApadmin(Context context) {     mContext = context;          mWifiManager = (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE);           closeWifiAp(mWifiManager);   }      private String mSSID = "";   private String mPasswd = "";   public voID startWifiAp(String ssID,String passwd) {     mSSID = ssID;     mPasswd = passwd;          if (mWifiManager.isWifIEnabled()) {       mWifiManager.setWifIEnabled(false);     }           stratWifiAp();          MyTimerCheck timerCheck = new MyTimerCheck() {              @OverrIDe       public voID doTimerCheckWork() {         // Todo auto-generated method stub                  if (isWifiApEnabled(mWifiManager)) {           Log.v(TAG,"Wifi enabled success!");           this.exit();         } else {           Log.v(TAG,"Wifi enabled Failed!");         }       }        @OverrIDe       public voID doTimeOutWork() {         // Todo auto-generated method stub         this.exit();       }     };     timerCheck.start(15,1000);        }    public voID stratWifiAp() {     Method method1 = null;     try {       method1 = mWifiManager.getClass().getmethod("setWifiApEnabled",WifiConfiguration.class,boolean.class);       WifiConfiguration netConfig = new WifiConfiguration();        netConfig.SSID = mSSID;       netConfig.preSharedKey = mPasswd;        netConfig.allowedAuthAlgorithms           .set(WifiConfiguration.AuthAlgorithm.OPEN);       netConfig.allowedProtocols.set(WifiConfiguration.Protocol.RSN);       netConfig.allowedProtocols.set(WifiConfiguration.Protocol.WPA);       netConfig.allowedKeyManagement           .set(WifiConfiguration.KeyMgmt.WPA_PSK);       netConfig.allowedPairwiseCiphers           .set(WifiConfiguration.PairwiseCipher.CCMP);       netConfig.allowedPairwiseCiphers           .set(WifiConfiguration.PairwiseCipher.TKIP);       netConfig.allowedGroupCiphers           .set(WifiConfiguration.GroupCipher.CCMP);       netConfig.allowedGroupCiphers           .set(WifiConfiguration.GroupCipher.TKIP);        method1.invoke(mWifiManager,netConfig,true);      } catch (IllegalArgumentException e) {       // Todo auto-generated catch block       e.printstacktrace();     } catch (illegalaccessexception e) {       // Todo auto-generated catch block       e.printstacktrace();     } catch (InvocationTargetException e) {       // Todo auto-generated catch block       e.printstacktrace();     } catch (SecurityException e) {       // Todo auto-generated catch block       e.printstacktrace();     } catch (NoSuchMethodException e) {       // Todo auto-generated catch block       e.printstacktrace();     }   }    private static voID closeWifiAp(WifiManager wifiManager) {     if (isWifiApEnabled(wifiManager)) {       try {         Method method = wifiManager.getClass().getmethod("getWifiApConfiguration");         method.setAccessible(true);          WifiConfiguration config = (WifiConfiguration) method.invoke(wifiManager);          Method method2 = wifiManager.getClass().getmethod("setWifiApEnabled",boolean.class);         method2.invoke(wifiManager,config,false);       } catch (NoSuchMethodException e) {         // Todo auto-generated catch block         e.printstacktrace();       } catch (IllegalArgumentException e) {         // Todo auto-generated catch block         e.printstacktrace();       } catch (illegalaccessexception e) {         // Todo auto-generated catch block         e.printstacktrace();       } catch (InvocationTargetException e) {         // Todo auto-generated catch block         e.printstacktrace();       }     }   }    private static boolean isWifiApEnabled(WifiManager wifiManager) {     try {       Method method = wifiManager.getClass().getmethod("isWifiApEnabled");       method.setAccessible(true);       return (Boolean) method.invoke(wifiManager);      } catch (NoSuchMethodException e) {       // Todo auto-generated catch block       e.printstacktrace();     } catch (Exception e) {       e.printstacktrace();     }      return false;   }  } 

MyTimeCheck.java

package com.Widget.hotspot; public abstract class MyTimerCheck {   private int mCount = 0;   private int mTimeOutCount = 1;   private int mSleepTime = 1000; // 1s   private boolean mExitFlag = false;   private Thread mThread = null;      /**    * Do not process UI work in this.    */   public abstract voID doTimerCheckWork();      public abstract voID doTimeOutWork();      public MyTimerCheck() {     mThread = new Thread(new Runnable() {              @OverrIDe       public voID run() {         // Todo auto-generated method stub         while (!mExitFlag) {           mCount++;           if (mCount < mTimeOutCount) {             doTimerCheckWork();             try {               mThread.sleep(mSleepTime);             } catch (InterruptedException e) {               // Todo auto-generated catch block               e.printstacktrace();               exit();             }           } else {             doTimeOutWork();           }         }       }     });   }      /**    * start    * @param times How many times will check?    * @param sleepTime ms,Every check sleep time.    */   public voID start(int timeOutCount,int sleepTime) {     mTimeOutCount = timeOutCount;     mSleepTime = sleepTime;          mThread.start();   }      public voID exit() {     mExitFlag = true;   }    } 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。

总结

以上是内存溢出为你收集整理的Android 连接Wifi和创建Wifi热点的实例全部内容,希望文章能够帮你解决Android 连接Wifi和创建Wifi热点的实例所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1147938.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-31
下一篇2022-05-31

发表评论

登录后才能评论

评论列表(0条)

    保存