1)获得WifiManager
WifiManager wifiManager=(WifiManager) getSystemService(WIFI_SERVICE);
2)获取Wifi信息
WifiInfo wifiInfo=wifiManager.getConnectionInfo(); //当前wifi连接信息
List scanResults=wifiManager.getScanResults();//搜索到的设备列表
for (ScanResult scanResult : scanResults) {
tv.append(“\n设备名:”+scanResult.SSID
+" 信号强度:“+scanResult.level+”/n :"+wifiManager.calculateSignalLevel(scanResult.level,4));
}
附 WifiManager中计算级别的代码:
/**
-
Calculates the level of the signal. This should be used any time a signal
-
is being shown.
-
@param rssi The power of the signal measured in RSSI.
-
@param numLevels The number of levels to consider in the calculated
-
level.
-
@return A level of the signal, given in the range of 0 to numLevels-1
-
(both inclusive).
*/
public static int calculateSignalLevel(int rssi, int numLevels) {
if (rssi <= MIN_RSSI) {
return 0;
} else if (rssi >= MAX_RSSI) {
return numLevels - 1;
} else {
int partitionSize = (MAX_RSSI - MIN_RSSI) / (numLevels - 1);
return (rssi - MIN_RSSI) / partitionSize;
}
}
3)网络权限
如:方法封装(返回返回当前连接的wifi的名字)
private String getConnectWifiSsid(){
WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
Log.d(“wifiInfo”, wifiInfo.toString());
Log.d(“SSID”,wifiInfo.getSSID());
return wifiInfo.getSSID();
}
如果不是想获取当前连接,而是想获取WIFI设置中的连接, 可以使用 WifiManager.getConfiguredNetworks
七、获取当前已连接的wifi配置信息
==================
public class MyWifi extends Activity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TextView infoText = (TextView) this.findViewById(R.id.info);
infoText.setText(getInfo());
}
private String getInfo()
{
WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
WifiInfo info = wifi.getConnectionInfo();
String maxText = info.getMacAddress();
String ipText = intToIp(info.getIpAddress());
String status = “”;
if (wifi.getWifiState() == WifiManager.WIFI_STATE_ENABLED)
{
status = “WIFI_STATE_ENABLED”;
}
String ssid = info.getSSID();
int networkID = info.getNetworkId();
int speed = info.getLinkSpeed();
return “mac:” + maxText + “\n\r”
-
“ip:” + ipText + “\n\r”
-
“wifi status :” + status + “\n\r”
-
“ssid :” + ssid + “\n\r”
-
“net work id :” + networkID + “\n\r”
-
“connection speed:” + speed + “\n\r”
;
}
private String intToIp(int ip)
{
return (ip & 0xFF) + “.” + ((ip >> 8) & 0xFF) + “.” + ((ip >> 16) & 0xFF) + “.”
- ((ip >> 24) & 0xFF);
}
}
八、Android开发周围wifi热点和属性的获取
=========================
一、获取wifi属性
获得Android系统相关的属性,通过Manager来获得对对象的操作服务。WiFi相关的操作中需要用到两个Manager:WifiManager和ConnectivityManage:
[java] view plain copy
-
public WifiManager wifiManager; //管理wifi
-
public ConnectivityManager connectManager; //管理网络连接
[java] view plain copy
-
wifiManager = (WifiManager) getSystemService(WIFI_SERVICE); //获得系统wifi服务
-
connectManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
获得服务后,即可得到对象进而获得相关属性:
[java] view plain copy
-
public NetworkInfo netInfo; //网络连接
-
public WifiInfo wifiInfo; //wifi
-
public DhcpInfo dhcpInfo; //动态主机配置协议信息的对象,获得IP等网关信息
网络信息的获取:
[java] view plain copy
-
netInfo = connectManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
-
dhcpInfo = wifiManager.getDhcpInfo();
-
wifiInfo = wifiManager.getConnectionInfo();
要获得wifi相关的网络信息,必须设定网络类型参数:ConnectivityManager.TYPE_WIFI.
下面就可以获得需要的信息,例如当前连接wifi的名称等等属性,即SSID:
[java] view plain copy
- wifiInfo.getSSID();
还要获得当前连接wifi网络的 ip、mask、netgate、dns 等信息,则需要如下实现:
[java] view plain copy
-
String wifiProperty = “当前连接Wifi信息如下:”+wifiInfo.getSSID()+‘\n’+
-
“ip:” + FormatString(dhcpInfo.ipAddress) +‘\n’+
-
“mask:” + FormatString(dhcpInfo.netmask) +‘\n’+
-
“netgate:”+ FormatString(dhcpInfo.gateway) +‘\n’+
-
“dns:” + FormatString(dhcpInfo.dns1) ;
其中dhcpInfo属性的值为int型,要转换成通常见到的32位地址则需要转换方法:
[java] view plain copy
-
public String FormatString(int value){
-
String strValue=“”;
-
byte[] ary = intToByteArray(value);
-
for(int i=ary.length-1;i>=0;i–){
-
strValue += (ary[i] & 0xFF);
-
if(i>0){
-
strValue+=“.”;
-
}
-
}
-
return strValue;
-
}
-
public byte[] intToByteArray(int value){
-
byte[] b = new byte[4];
-
for (int i = 0; i < 4; i++){
-
int offset = (b.length - 1 - i) * 8;
-
b[i] = (byte) ((value >>> offset) & 0xFF);
-
}
-
return b;
-
}
上述方法即可获得wifi网络相关的信息,根据需要来选择方法。
二、获取周围WiFi热点
wifiManager提供了一个方法getScanResults()来获得周围的wifi信息,其返回的是一组ScanResult对象,存放在list当中,每个ScanResult对象封装了一个wifi热点相关信息,通过ScanResult对象的属性即可获取到,最常用的两个属性为wifi名称(SSID)和信号强度(level):
作者2013年从java开发,转做Android开发,在小厂待过,也去过华为,OPPO等大厂待过,18年四月份进了阿里一直到现在。
参与过不少面试,也当面试官 面试过很多人。深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长,而且极易碰到天花板技术停滞不前!
我整理了一份阿里P7级别的最系统的Android开发主流技术,特别适合有3-5年以上经验的小伙伴深入学习提升。
主要包括阿里,以及字节跳动,腾讯,华为,小米,等一线互联网公司主流架构技术。如果你想深入系统学习Android开发,成为一名合格的高级工程师,可以收藏一下这些Android进阶技术选型
我搜集整理过这几年阿里,以及腾讯,字节跳动,华为,小米等公司的面试题,把面试的要求和技术点梳理成一份大而全的“ Android架构师”面试 Xmind(实际上比预期多花了不少精力),包含知识脉络 + 分支细节。
Java语言与原理;
大厂,小厂。Android面试先看你熟不熟悉Java语言
高级UI与自定义view;
自定义view,Android开发的基本功。
性能调优;
数据结构算法,设计模式。都是这里面的关键基础和重点需要熟练的。
NDK开发;
未来的方向,高薪必会。
前沿技术;
组件化,热升级,热修复,框架设计
网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。
我在搭建这些技术框架的时候,还整理了系统的高级进阶教程,会比自己碎片化学习效果强太多,CodeChina上可见;
当然,想要深入学习并掌握这些能力,并不简单。关于如何学习,做程序员这一行什么工作强度大家都懂,但是不管工作多忙,每周也要雷打不动的抽出 2 小时用来学习。
不出半年,你就能看出变化!
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。
我在搭建这些技术框架的时候,还整理了系统的高级进阶教程,会比自己碎片化学习效果强太多,CodeChina上可见;
当然,想要深入学习并掌握这些能力,并不简单。关于如何学习,做程序员这一行什么工作强度大家都懂,但是不管工作多忙,每周也要雷打不动的抽出 2 小时用来学习。
不出半年,你就能看出变化!
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!