您的位置:首页 > 移动开发 > Android开发

android wifi连接开发实例

2013-04-14 12:26 423 查看
转自:/article/11604650.html

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

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);

}

}







内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: