其他分享
首页 > 其他分享> > Android手机通过wifi进行数据传输(三)

Android手机通过wifi进行数据传输(三)

作者:互联网

上文接Android手机通过wifi进行数据传输(二)  源码文件2 MyTimerCheck.java

 

package edu.cdut.robin.hotspot;   publicabstractclassMyTimerCheck{     privateint mCount =0;     privateint mTimeOutCount =1;     privateint 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;     }      }

 

源码文件3 WifiAdmin.java

 

package edu.cdut.robin.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;     publicabstractclassWifiAdmin{          privatestaticfinalString TAG ="WifiAdmin";          privateWifiManager mWifiManager;     privateWifiInfo mWifiInfo;     // 扫描出的网络连接列表     private List<ScanResult> mWifiList;     private List<WifiConfiguration> mWifiConfiguration;       privateWifiLock mWifiLock;          privateString mPasswd ="";     privateString mSSID ="";          privateContext mContext =null;       publicWifiAdmin(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);         }     }       publicabstractIntent myRegisterReceiver(BroadcastReceiver receiver,IntentFilter filter);          publicabstractvoid myUnregisterReceiver(BroadcastReceiver receiver);          publicabstractvoid onNotifyWifiConnected();          publicabstractvoid 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));     }       privateBroadcastReceiver mBroadcastReceiver =newBroadcastReceiver(){           @Override         publicvoid 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,newIntentFilter(WifiManager.RSSI_CHANGED_ACTION));         mHaveRegister = STATE_REGISTERED;                  startTimer();     }          privatesynchronizedvoid unRegister(){         Log.v(TAG,"unRegister() ##mHaveRegister = "+ mHaveRegister);                  if(mHaveRegister == STATE_UNREGISTERED                  || mHaveRegister == STATE_UNREGISTERING){             return;         }                  mHaveRegister = STATE_UNREGISTERING;         myUnregisterReceiver(mBroadcastReceiver);         mHaveRegister = STATE_UNREGISTERED;     }          privateTimer mTimer =null;     privatevoid startTimer(){         if(mTimer !=null){             stopTimer();         }                  mTimer =newTimer(true); //      mTimer.schedule(mTimerTask, 0, 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);     }       publicvoid 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();     } }  

 

源码文件4

 

WifiApAdmin.java package edu.cdut.robin.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;   /**  * 创建热点  *  */ publicclassWifiApAdmin{     publicstaticfinalString TAG ="WifiApAdmin";          publicstaticvoid closeWifiAp(Context context){         WifiManager wifiManager =(WifiManager) context.getSystemService(Context.WIFI_SERVICE);          closeWifiAp(wifiManager);     }          privateWifiManager mWifiManager =null;          privateContext mContext =null;     publicWifiApAdmin(Context context){         mContext = context;                  mWifiManager =(WifiManager) mContext.getSystemService(Context.WIFI_SERVICE);                    closeWifiAp(mWifiManager);     }          privateString mSSID ="";     privateString mPasswd ="";     publicvoid startWifiAp(String ssid,String passwd){         mSSID = ssid;         mPasswd = passwd;                  if(mWifiManager.isWifiEnabled()){             mWifiManager.setWifiEnabled(false);         }                   stratWifiAp();                  MyTimerCheck timerCheck =newMyTimerCheck(){                          @Override             publicvoid 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             publicvoid doTimeOutWork(){                 // TODO Auto-generated method stub                 this.exit();             }         };         timerCheck.start(15, 1000);              }       publicvoid stratWifiAp(){         Method method1 =null;         try{             method1 = mWifiManager.getClass().getMethod("setWifiApEnabled",                     WifiConfiguration.class,boolean.class);             WifiConfiguration netConfig =newWifiConfiguration();               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(再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!http://www.captainbed.net

标签:int,import,WifiConfiguration,wifi,mWifiManager,数据传输,Android,config,public
来源: https://www.cnblogs.com/siwnchh/p/10464063.html