android wifi連接開發實例

轉自: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);
 }
}


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章