android wifi连接开发实例

xiaoxiao2021-02-28  133

转自:http://blog.csdn.net/dianqiugg/article/details/8205613

参考网上代码,结合了自己的想法,废话不多说,直接上代码

1、布局文件:wifi_layout.xml

<?xml version="1.0" encoding="utf-8"?> < LinearLayout xmlns:Android="http://schemas.android.com/apk/res/android"  android:orientation="vertical" android:layout_width="match_parent"  android:layout_height="match_parent">  <Button android:id="@+id/scan_button" android:layout_width="fill_parent"   android:layout_height="wrap_content" android:text="扫描"   android:textColor="#000000" />  <TextView android:id="@+id/wifi_result_textview"   android:layout_width="fill_parent" android:layout_height="wrap_content" /> < /LinearLayout> 2、Activity:WifiActivity.Java

/**  * @Title: WifiActivity.java  * @Package com.ly  * @Description:  * Copyright: Copyright (c) 2011  *   * @date 2012-11-9 上午11:47:51  * @version V1.0  */

package com.android.activity;

import java.util.List;

import android.app.AlertDialog.Builder; import android.app.ProgressDialog; import android.content.Context; import android.content.DialogInterface; import android.NET.wifi.ScanResult; import android.net.wifi.WifiConfiguration; import android.Net.wifi.WifiInfo; import android.net.wifi.WifiManager; import android.os.AsyncTask; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast;

import com.android.demo.R; import com.android.util.WifiUtil;

/**  * @ClassName: WifiActivity  * @Description: TODO  * @date 2012-11-9 上午11:47:51  *  */ public class WifiActivity extends BaseActivity implements OnClickListener {

 private Button scan_button;

 private TextView wifi_result_textview;

 private WifiManager wifiManager;

 private WifiInfo currentWifiInfo;// 当前所连接的wifi

 private List<ScanResult> wifiList;// wifi列表

 private String[] str;

 private int wifiIndex;

 private ProgressDialog progressDialog;

 @Override  protected void onCreate(Bundle savedInstanceState)  {   super.onCreate(savedInstanceState);   setContentView(R.layout.wifi_layout);   wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);   setupViews();   initListener();  }

 @Override  protected void onResume()  {   openWifi();   currentWifiInfo = wifiManager.getConnectionInfo();   wifi_result_textview.setText("当前网络:" + currentWifiInfo.getSSID()     + " ip:" + WifiUtil.intToIp(currentWifiInfo.getIpAddress()));   new ScanWifiThread().start();   super.onResume();  }

 @Override  public void setupViews()  {   scan_button = (Button) findViewById(R.id.scan_button);   wifi_result_textview = (TextView) findViewById(R.id.wifi_result_textview);   super.setupViews();  }

 @Override  public void initListener()  {   scan_button.setOnClickListener(this);   super.initListener();  }

 @Override  public void onClick(View v)  {   switch (v.getId())   {   case R.id.scan_button:    lookUpScan();    break;   }  }

 /**   * 打开wifi   */  public void openWifi()  {   if (!wifiManager.isWifiEnabled())   {    wifiManager.setWifiEnabled(true);   }  }

 /**   * 扫描wifi线程   *   * @author passing   *   */  class ScanWifiThread extends Thread  {

  @Override   public void run()   {    while (true)    {     currentWifiInfo = wifiManager.getConnectionInfo();     startScan();     try     {      Thread.sleep(1000);     }     catch (InterruptedException e)     {      break;     }    }   }  }

 /**   * 扫描wifi   */  public void startScan()  {   wifiManager.startScan();   // 获取扫描结果   wifiList = wifiManager.getScanResults();   str = new String[wifiList.size()];   String tempStr = null;   for (int i = 0; i < wifiList.size(); i++)   {    tempStr = wifiList.get(i).SSID;    if (null != currentWifiInfo      && tempStr.equals(currentWifiInfo.getSSID()))    {     tempStr = tempStr + "(已连接)";    }    str[i] = tempStr;   }  }

 /**   * 弹出框 查看扫描结果   */  public void lookUpScan()  {   Builder builder = new Builder(WifiActivity.this);   builder.setTitle("wifi");   builder.setItems(str, new DialogInterface.OnClickListener()   {

   @Override    public void onClick(DialogInterface dialog, int which)    {     wifiIndex = which;     handler.sendEmptyMessage(3);    }   });   builder.show();  }

 /**   * 获取网络ip地址   *   * @author passing   *   */  class RefreshSsidThread extends Thread  {

  @Override   public void run()   {    boolean flag = true;    while (flag)    {     currentWifiInfo = wifiManager.getConnectionInfo();     if (null != currentWifiInfo.getSSID()       && 0 != currentWifiInfo.getIpAddress())     {      flag = false;     }    }    handler.sendEmptyMessage(4);    super.run();   }  }

 /**   * 连接网络   *   * @param index   * @param password   */  public void connetionConfiguration(int index, String password)  {   progressDialog = ProgressDialog.show(WifiActivity.this, "正在连接...",     "请稍候...");   new ConnectWifiThread().execute(index + "", password);  }

 /**   * 连接wifi   *   * @author passing   *   */  class ConnectWifiThread extends AsyncTask<String, Integer, String>  {

  @Override   protected String doInBackground(String... params)   {    int index = Integer.parseInt(params[0]);    if (index > wifiList.size())    {     return null;    }    // 连接配置好指定ID的网络    WifiConfiguration config = WifiUtil.createWifiInfo(      wifiList.get(index).SSID, params[1], 3, wifiManager);

   int networkId = wifiManager.addNetwork(config);    if (null != config)    {     wifiManager.enableNetwork(networkId, true);     return wifiList.get(index).SSID;    }    return null;   }

  @Override   protected void onPostExecute(String result)   {    if (null != progressDialog)    {     progressDialog.dismiss();    }    if (null != result)    {     handler.sendEmptyMessage(0);    }    else    {     handler.sendEmptyMessage(1);    }    super.onPostExecute(result);   }

 }

 Handler handler = new Handler()  {

  @Override   public void handleMessage(Message msg)   {    switch (msg.what)    {    case 0:     wifi_result_textview.setText("正在获取ip地址...");     new RefreshSsidThread().start();     break;    case 1:     Toast.makeText(WifiActivity.this, "连接失败!", Toast.LENGTH_SHORT)       .show();     break;    case 3:     View layout = LayoutInflater.from(WifiActivity.this).inflate(       R.layout.custom_dialog_layout, null);     Builder builder = new Builder(WifiActivity.this);     builder.setTitle("请输入密码").setView(layout);     final EditText passowrdText = (EditText) layout       .findViewById(R.id.password_edittext);     builder.setPositiveButton("连接",       new DialogInterface.OnClickListener()       {

       @Override        public void onClick(DialogInterface dialog,          int which)        {         connetionConfiguration(wifiIndex, passowrdText           .getText().toString());        }       }).show();     break;    case 4:     Toast.makeText(WifiActivity.this, "连接成功!", Toast.LENGTH_SHORT)       .show();     wifi_result_textview.setText("当前网络:"       + currentWifiInfo.getSSID() + " ip:"       + WifiUtil.intToIp(currentWifiInfo.getIpAddress()));     break;    }    super.handleMessage(msg);   }

 };

}

3、辅助类:WifiUtil.java

/**  *  */ package com.android.util;

import java.util.List;

import android.net.wifi.WifiConfiguration; import android.net.wifi.WifiManager;

/**  * @author passing  *  */ public class WifiUtil {

 /**   * 配置wifi   *   * @param SSID   * @param Password   * @param Type   * @return   */  public static WifiConfiguration createWifiInfo(String SSID,    String Password, int Type, WifiManager wifiManager)  {   WifiConfiguration config = new WifiConfiguration();   config.allowedAuthAlgorithms.clear();   config.allowedGroupCiphers.clear();   config.allowedKeyManagement.clear();   config.allowedPairwiseCiphers.clear();   config.allowedProtocols.clear();   config.SSID = "\"" + SSID + "\"";

  WifiConfiguration tempConfig = isExsits(SSID, wifiManager);   if (tempConfig != null) {    wifiManager.removeNetwork(tempConfig.networkId);   }

  if (Type == 1) // WIFICIPHER_NOPASS   {    config.wepKeys[0] = "";    config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);    config.wepTxKeyIndex = 0;   }   if (Type == 2) // 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;   }   if (Type == 3) // 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;  }

 /**   * 判断wifi是否存在   *   * @param SSID   * @param wifiManager   * @return   */  private static WifiConfiguration isExsits(String SSID,    WifiManager wifiManager)  {   List<WifiConfiguration> existingConfigs = wifiManager     .getConfiguredNetworks();   for (WifiConfiguration existingConfig : existingConfigs) {    if (existingConfig.SSID.equals("\"" + SSID + "\"")) {     return existingConfig;    }   }   return null;  }

 /**   * 转换IP地址   *   * @param i   * @return   */  public static String intToIp(int i)  {   return (i & 0xFF) + "." + ((i >> 8) & 0xFF) + "." + ((i >> 16) & 0xFF)     + "." + ((i >> 24) & 0xFF);  } }

 

转载请注明原文地址: https://www.6miu.com/read-18129.html

最新回复(0)