废话不说,上代码:
MainActivity.java
package com.wanmen.acer.wifi_test; import android.content.DialogInterface; import android.support.v7.app.AlertDialog; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; public class MainActivity extends AppCompatActivity { Button Check =null; public String wifiname = null; public String wifiMac = null; public int wifiID ; public int wifiIP ; private WifiUtils localwifi; public void dialog(String str) { AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); builder.setMessage(str); builder.setTitle("提示"); builder.setPositiveButton("ok", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { dialogInterface.dismiss(); } }); builder.create().show(); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); localwifi = new WifiUtils(MainActivity.this); Check = (Button)findViewById(R.id.check); Check.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { localwifi.getConnectedInfo(); wifiname = localwifi.getConnectedSSID(); wifiID = localwifi.getConnectedID(); wifiMac = localwifi.getConnectedMacAddr(); wifiIP = localwifi.getConnectedIPAddr(); dialog("wifi名称:"+wifiname+'\n'+"wifiID:"+wifiID+'\n'+"wifiIP:"+wifiIP+'\n'+"wifiMac:"+wifiMac); } }); } }
WifiUtils.java//直接用的别人的代码
package com.wanmen.acer.wifi_test; import android.content.Context; import android.net.wifi.ScanResult; import android.net.wifi.WifiConfiguration; import android.net.wifi.WifiInfo; import android.net.wifi.WifiManager; import android.util.Log; import java.util.ArrayList; import java.util.List; /** * Created by acer on 2016/9/13. */ public class WifiUtils { private WifiManager localWifiManager;//提供Wifi管理的各种主要API,主要包含wifi的扫描、建立连接、配置信息等 //private List<ScanResult> wifiScanList;//ScanResult用来描述已经检测出的接入点,包括接入的地址、名称、身份认证、频率、信号强度等 private List<WifiConfiguration> wifiConfigList;//WIFIConfiguration描述WIFI的链接信息,包括SSID、SSID隐藏、password等的设置 private WifiInfo wifiConnectedInfo;//已经建立好网络链接的信息 private WifiManager.WifiLock wifiLock;//手机锁屏后,阻止WIFI也进入睡眠状态及WIFI的关闭 public WifiUtils( Context context){ localWifiManager = (WifiManager)context.getSystemService(Context.WIFI_SERVICE); } //检查WIFI状态 public int WifiCheckState(){ return localWifiManager.getWifiState(); } //开启WIFI public void WifiOpen(){ if(!localWifiManager.isWifiEnabled()){ localWifiManager.setWifiEnabled(true); } } //关闭WIFI public void WifiClose(){ if(!localWifiManager.isWifiEnabled()){ localWifiManager.setWifiEnabled(false); } } //扫描wifi public void WifiStartScan(){ localWifiManager.startScan(); } //得到Scan结果 public List<ScanResult> getScanResults(){ return localWifiManager.getScanResults();//得到扫描结果 } //Scan结果转为Sting public List<String> scanResultToString(List<ScanResult> list){ List<String> strReturnList = new ArrayList<String>(); for(int i = 0; i < list.size(); i++){ ScanResult strScan = list.get(i); String str = strScan.toString(); boolean bool = strReturnList.add(str); if(!bool){ Log.i("scanResultToSting","Addfail"); } } return strReturnList; } //得到Wifi配置好的信息 public void getConfiguration(){ wifiConfigList = localWifiManager.getConfiguredNetworks();//得到配置好的网络信息 for(int i =0;i<wifiConfigList.size();i++){ Log.i("getConfiguration",wifiConfigList.get(i).SSID); Log.i("getConfiguration",String.valueOf(wifiConfigList.get(i).networkId)); } } //判定指定WIFI是否已经配置好,依据WIFI的地址BSSID,返回NetId public int IsConfiguration(String SSID){ Log.i("IsConfiguration",String.valueOf(wifiConfigList.size())); for(int i = 0; i < wifiConfigList.size(); i++){ Log.i(wifiConfigList.get(i).SSID,String.valueOf( wifiConfigList.get(i).networkId)); if(wifiConfigList.get(i).SSID.equals(SSID)){//地址相同 return wifiConfigList.get(i).networkId; } } return -1; } //添加指定WIFI的配置信息,原列表不存在此SSID public int AddWifiConfig(List<ScanResult> wifiList,String ssid,String pwd){ int wifiId = -1; for(int i = 0;i < wifiList.size(); i++){ ScanResult wifi = wifiList.get(i); if(wifi.SSID.equals(ssid)){ Log.i("AddWifiConfig","equals"); WifiConfiguration wifiCong = new WifiConfiguration(); wifiCong.SSID = "\""+wifi.SSID+"\"";//\"转义字符,代表" wifiCong.preSharedKey = "\""+pwd+"\"";//WPA-PSK密码 wifiCong.hiddenSSID = false; wifiCong.status = WifiConfiguration.Status.ENABLED; wifiId = localWifiManager.addNetwork(wifiCong);//将配置好的特定WIFI密码信息添加,添加完成后默认是不激活状态,成功返回ID,否则为-1 if(wifiId != -1){ return wifiId; } } } return wifiId; } //连接指定Id的WIFI public boolean ConnectWifi(int wifiId){ for(int i = 0; i < wifiConfigList.size(); i++){ WifiConfiguration wifi = wifiConfigList.get(i); if(wifi.networkId == wifiId){ while(!(localWifiManager.enableNetwork(wifiId, true))){//激活该Id,建立连接 Log.i("ConnectWifi",String.valueOf(wifiConfigList.get(wifiId).status));//status:0--已经连接,1--不可连接,2--可以连接 } return true; } } return false; } //创建一个WIFILock public void createWifiLock(String lockName){ wifiLock = localWifiManager.createWifiLock(lockName); } //锁定wifilock public void acquireWifiLock(){ wifiLock.acquire(); } //解锁WIFI public void releaseWifiLock(){ if(wifiLock.isHeld()){//判定是否锁定 wifiLock.release(); } } //得到建立连接的信息 public void getConnectedInfo(){ wifiConnectedInfo = localWifiManager.getConnectionInfo(); } //得到连接的MAC地址 public String getConnectedMacAddr(){ return (wifiConnectedInfo == null)? "NULL":wifiConnectedInfo.getMacAddress(); } //得到连接的名称SSID public String getConnectedSSID(){ return (wifiConnectedInfo == null)? "NULL":wifiConnectedInfo.getSSID(); } //得到连接的IP地址 public int getConnectedIPAddr(){ return (wifiConnectedInfo == null)? 0:wifiConnectedInfo.getIpAddress(); } //得到连接的ID public int getConnectedID(){ return (wifiConnectedInfo == null)? 0:wifiConnectedInfo.getNetworkId(); } }
权限:
1.在这次小尝试中,顺便试验了一下AlertDialog窗口,下面说明一下AlertDialog窗口:<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
这个组件属于APPCOMPAT.v7里面的,但是在xml文件中不知道咋写,于是使用了动态的方式,
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);该代码并没有使用AlertDialog的构造方法,而是使用了.builder()方法,并且绑定了Mainactivity。
2.测试中出现了一次空指针错误,由于getApplicationContext()方法放在了setContentView(R.layout.activity_main);之前。
3.在测试中,发现Android studio可以在第一次调试之后,不用终止调试,如果更改了代码,可以直接再次点击调试运行,这样就可以不用再执行gradle build了。
4.本次直接用了http://download.youkuaiyun.com/detail/liuhui_8989/7154671中的代码。以表谢意