几个类:
import android.net.wifi.ScanResult;
import android.net.wifi.WifiManager;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiConfiguration;
WIFI网卡的状态:
1.WIFI_STATE_DISABLED : WIFI网卡不可用(1)
2.WIFI_STATE_DISABLING : WIFI网卡正在关闭(0)
3.WIFI_STATE_ENABLED : WIFI网卡可用(3)4.WIFI_STATE_ENABLING : WIFI网正在打开(2) (WIFI启动需要一段时间)
5.WIFI_STATE_UNKNOWN : 未知网卡状态
WifiInfo:
getBSSID() 获取BSSID
getDetailedStateOf() 获取客户端的连通性
getHiddenSSID() 获得SSID 是否被隐藏
getIpAddress() 获取IP 地址
getLinkSpeed() 获得连接的速度
getMacAddress() 获得Mac 地址
getRssi() 获得802.11n 网络的信号
getSSID() 获得SSID
getSupplicanState() 返回具体客户端状态的信息
需要权限:
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"></uses-permission>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
package com.pax.network;
import android.app.Activity;
import android.os.Bundle;
import android.os.Message;
import android.os.SystemClock;
import android.widget.Button;
import android.widget.Toast;
import android.view.View;
import android.view.View.OnClickListener;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiManager;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiConfiguration;
import android.net.NetworkInfo.State;
import android.net.ConnectivityManager;
import android.os.Handler;
import android.util.Log;
import android.content.Context;
import java.util.List;
public class wifi extends Activity implements OnClickListener{
private Button openWifi = null;
private Button closeWifi = null;
private Button wifiStatus = null;
private Button connectWifi = null;
private final static String TAG = "wifi";
private List<ScanResult> wifiList= null;
private WifiManager wifiManager = null;
private WifiInfo WifiInfo = null;
private WifiConfiguration wifiConfiguration = null;
private final static int OPENWIFISUCCESS = 0;
private final static int CLOSEWIFISUCCESS = 1;
private final static int CONNECTED = 2;
private final static int DISABLING = 3;//正在关闭
private final static int ENABLING = 4;//正在打开
private final static int NOEXIST = 5;//D800不存在
private final static String SSID = "D800Test";
private final static String PASSWORD = "1234567890";
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.wifi);
initView();
wifiManager = (WifiManager)wifi.this.getSystemService(WIFI_SERVICE);
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
}
private void initView(){
openWifi = (Button)findViewById(R.id.btOpenWifi);
connectWifi = (Button)findViewById(R.id.btConnectWifi);
closeWifi = (Button)findViewById(R.id.btCloseWifi);
wifiStatus = (Button)findViewById(R.id.btWifiStatus);
openWifi.setOnClickListener(this);
connectWifi.setOnClickListener(this);
closeWifi.setOnClickListener(this);
wifiStatus.setOnClickListener(this);
}
@Override
public void onClick(View view) {
// TODO Auto-generated method stub
switch(view.getId()){
case R.id.btOpenWifi:
openWifi();
break;
case R.id.btConnectWifi:
connectWifi();
break;
case R.id.btCloseWifi:
closeWifi();
break;
case R.id.btWifiStatus:
int status = getWifiState();
Log.e(TAG,"status = "+status);
if(status == WifiManager.WIFI_STATE_DISABLED){
handler.sendEmptyMessage(CLOSEWIFISUCCESS);
}else if(status == WifiManager.WIFI_STATE_DISABLING){
handler.sendEmptyMessage(DISABLING);
}else if(status == WifiManager.WIFI_STATE_ENABLING){
handler.sendEmptyMessage(ENABLING);
}else if(status == WifiManager.WIFI_STATE_ENABLED){
handler.sendEmptyMessage(OPENWIFISUCCESS);
}
break;
default:
break;
}
}
private void openWifi(){
if(!wifiManager.isWifiEnabled()){
wifiManager.setWifiEnabled(true);
while(wifiManager.getWifiState() != WifiManager.WIFI_STATE_ENABLED){
try {
Thread.sleep(100);
} catch (InterruptedException ie) {}
}
}
}
private void closeWifi(){
if(wifiManager.isWifiEnabled()){
wifiManager.setWifiEnabled(false);
}
}
private void connectWifi(){
int i,netId;
WifiConfiguration wconfig = null;
wifiManager.startScan();
wifiList = wifiManager.getScanResults();
try {
Thread.sleep(100);
} catch (InterruptedException ie) {}
Log.e(TAG,"size = "+wifiList.size());
for(i = 0; i < wifiList.size(); i++){
ScanResult scanRet = wifiList.get(i);
Log.e(TAG,"ssid = "+scanRet.SSID.toString());
if(scanRet.SSID.equals(SSID)){
Log.e(TAG,"D800 exist");
wconfig = isExsits(SSID);
if(wconfig == null){
wconfig = new WifiConfiguration();
wconfig.allowedAuthAlgorithms.clear();
wconfig.allowedGroupCiphers.clear();
wconfig.allowedKeyManagement.clear();
wconfig.allowedPairwiseCiphers.clear();
wconfig.allowedProtocols.clear();
wconfig.SSID = "\"" + scanRet.SSID + "\"";
wconfig.preSharedKey = "\"" + PASSWORD + "\"";
wconfig.hiddenSSID = true;
wconfig.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);
wconfig.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
wconfig.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
wconfig.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
// wconfig.allowedProtocols.set(WifiConfiguration.Protocol.WPA);
wconfig.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
wconfig.allowedPairwiseCiphers
.set(WifiConfiguration.PairwiseCipher.CCMP);
wconfig.status = WifiConfiguration.Status.ENABLED;
}else{
Log.e(TAG,"connect again");
}
netId = wifiManager.addNetwork(wconfig);
wifiManager.enableNetwork(netId, true);
while(true){
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
ConnectivityManager connM = (ConnectivityManager)wifi.this.getSystemService(CONNECTIVITY_SERVICE);
State state = connM.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState();
if (State.CONNECTED == state) {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
break;
}
}
Toast.makeText(wifi.this, "connect D800 success", Toast.LENGTH_LONG).show();
break;
}else if(i == wifiList.size()){
handler.sendEmptyMessage(NOEXIST);
}
}
}
// 查看以前是否也配置过这个网络
private WifiConfiguration isExsits(String SSID) {
List<WifiConfiguration> existingConfigs = wifiManager.getConfiguredNetworks();
for (WifiConfiguration existingConfig : existingConfigs) {
if (existingConfig.SSID.equals("\"" + SSID + "\"")) {
return existingConfig;
}
}
return null;
}
private List<ScanResult> getWifilist(){
return wifiList;
}
private int getWifiState(){
return wifiManager.getWifiState();
}
Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
super.handleMessage(msg);
switch(msg.what){
case 0:
Toast.makeText(wifi.this, "open wifi success", Toast.LENGTH_SHORT).show();
break;
case 1:
Toast.makeText(wifi.this, "close wifi success", Toast.LENGTH_SHORT).show();
break;
case 2:
Toast.makeText(wifi.this, "connect wifi success", Toast.LENGTH_SHORT).show();
break;
case 3:
Toast.makeText(wifi.this, "closing wifi", Toast.LENGTH_SHORT).show();
break;
case 4:
Toast.makeText(wifi.this, "openning wifi", Toast.LENGTH_SHORT).show();
break;
case 5:
Toast.makeText(wifi.this, "D800 not exist", Toast.LENGTH_SHORT).show();
break;
default:
break;
}
}
};
}