android通过反射获取wifi热点ap的ssid和password
2017-07-17 14:08
573 查看
通过查看android5.1的源码,其实wifi热点的ssid和password已经在WifiConfiguration的构造方法里面初始化了,但是是hide的api, 第三方开发者调不到。
/** copy constructor {@hide} */
public WifiConfiguration(WifiConfiguration source) {
if (source != null) {
networkId = source.networkId;
status = source.status;
disableReason = source.disableReason;
disableReason = source.disableReason;
SSID = source.SSID;
BSSID = source.BSSID;
FQDN = source.FQDN;
naiRealm = source.naiRealm;
preSharedKey = source.preSharedKey;
........
}
}
红色部分便是SSID和password,他的构造函数的参数是自身对象,所以只要我们初始化一个WifiConfiguration对象,再用反射就能直接获取SSID和preSharedKey.
public static WifiConfiguration getWifiConfiguration(Context context)
{
WifiConfiguration mWifiConfig = null;
try
{
WifiManager wifiManager = (WifiManager) context.getSystemService(WIFI_SERVICE);
Method method = wifiManager.getClass().getMethod("getWifiApConfiguration");
method.setAccessible(true);
mWifiConfig = (WifiConfiguration) method.invoke(wifiManager);
}
catch (Exception e)
{
e.printStackTrace();
}
return mWifiConfig;
}
/**
* @param flag 0: ssid
* 1: pwd
*/
public static String getApSSIDAndPwd(Context context, int flag)
{
WifiConfiguration mWifiConfig = getWifiConfiguration(context);
String ssid = null;
String pwd = null;
if (null != mWifiConfig)
{
Field[] fields = mWifiConfig.getClass().getDeclaredFields();
if (null != fields)
{
for (Field field : fields)
{
try
{
if (field.getName().equals("SSID"))
{
ssid = field.get(mWifiConfig).toString();
Log.e(TAG, "AP SSI = " + ssid);
}
else if (field.getName().equals("preSharedKey"))
{
pwd = field.get(mWifiConfig).toString();
Log.e(TAG, "AP pwd = " + pwd);
}
}
catch (Exception e)
{
e.printStackTrace();
Log.e(TAG, "getApSSIDAndPwd()-->error:" + e);
}
}
}
}
if (null == ssid)
{
ssid = "Unknown";
}
if (null == pwd)
{
pwd = "Unknown";
}
if (0 == flag)
{
return ssid;
}
else
{
return pwd;
}
}
/** copy constructor {@hide} */
public WifiConfiguration(WifiConfiguration source) {
if (source != null) {
networkId = source.networkId;
status = source.status;
disableReason = source.disableReason;
disableReason = source.disableReason;
SSID = source.SSID;
BSSID = source.BSSID;
FQDN = source.FQDN;
naiRealm = source.naiRealm;
preSharedKey = source.preSharedKey;
........
}
}
红色部分便是SSID和password,他的构造函数的参数是自身对象,所以只要我们初始化一个WifiConfiguration对象,再用反射就能直接获取SSID和preSharedKey.
public static WifiConfiguration getWifiConfiguration(Context context)
{
WifiConfiguration mWifiConfig = null;
try
{
WifiManager wifiManager = (WifiManager) context.getSystemService(WIFI_SERVICE);
Method method = wifiManager.getClass().getMethod("getWifiApConfiguration");
method.setAccessible(true);
mWifiConfig = (WifiConfiguration) method.invoke(wifiManager);
}
catch (Exception e)
{
e.printStackTrace();
}
return mWifiConfig;
}
/**
* @param flag 0: ssid
* 1: pwd
*/
public static String getApSSIDAndPwd(Context context, int flag)
{
WifiConfiguration mWifiConfig = getWifiConfiguration(context);
String ssid = null;
String pwd = null;
if (null != mWifiConfig)
{
Field[] fields = mWifiConfig.getClass().getDeclaredFields();
if (null != fields)
{
for (Field field : fields)
{
try
{
if (field.getName().equals("SSID"))
{
ssid = field.get(mWifiConfig).toString();
Log.e(TAG, "AP SSI = " + ssid);
}
else if (field.getName().equals("preSharedKey"))
{
pwd = field.get(mWifiConfig).toString();
Log.e(TAG, "AP pwd = " + pwd);
}
}
catch (Exception e)
{
e.printStackTrace();
Log.e(TAG, "getApSSIDAndPwd()-->error:" + e);
}
}
}
}
if (null == ssid)
{
ssid = "Unknown";
}
if (null == pwd)
{
pwd = "Unknown";
}
if (0 == flag)
{
return ssid;
}
else
{
return pwd;
}
}
相关文章推荐
- Android AP模式下获取SSID/PASSWORD(反射机制
- 通过反射获取Android通知栏高度
- android里获取周围所有wifi ap 的信号强度的方法
- Android盒子开发,获取网络的信息(热点,WIFI,有线)
- Android中通过反射获取资源Id
- android通过反射代替R来获取控件对象
- Android开发之通过反射获取到Android隐藏的方法
- Android开发之如何获取wifi的名称即SSID
- Android网络相关(WiFi的开关,WiFi热点的开关,获取手机IP地址等)
- Android中通过反射获取资源Id
- Android通过Java反射获取系统属性值
- Android 通过反射及AIDL获取双卡手机SIM卡相关信息,及注册监听
- Android中通过反射获取资源Id(特别用在自己定义一个工具将其打成.jar包时,特别注意资源的获取)
- Android 通过反射获取系统组件的私有变量,并做更改
- android通过反射获取内置外置存储器列表
- Android编程获取Wifi名称(SSID)的方法
- Android(java)学习笔记109:通过反射获取成员变量和成员方法并且使用
- android 通过wifi 热点实现手机摄像头数据共享
- Android依据名字通过反射获取在drawable中的图片
- Android中通过反射获取资源Id