最近几天公司要求做一个建立wifi热点的apk,看了下系统设置的源码和SDK,因为我做的开发是在OTT之上,所以结合OTT的特点,有如下总结。
wifi热点是将机顶盒的有线网络通过wifi来共享出来,就是将机顶盒虚拟成一个无线路由器,所以在建立wifi热点时机顶盒上的wifi状态是要关闭的,在开启热点之前要判断当前的有线连接是否是有效的,判断是否是connected。代码如下
// 判断当前是否联网,如果联网了。判断是不是eth
public boolean isAvailableEth() {
ConnectivityManager mConnManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
NetworkInfo mInfo = mConnManager.getActiveNetworkInfo();
if (mInfo != null) {
if (mInfo.isAvailable() && mInfo.isConnected() && !mInfo.getTypeName().equals("WIFI")) {
return true;
}
return false;
}
return false;
public boolean setWifiApEnabled(String ssid ,String key ,String security, boolean enabled) {
mWifiConfig.SSID = ssid ;
if(security.equals("open")){
mWifiConfig.allowedKeyManagement.set(KeyMgmt.NONE);
}else{
mWifiConfig.allowedKeyManagement.set(KeyMgmt.WPA_PSK);
mWifiConfig.allowedAuthAlgorithms.set(AuthAlgorithm.OPEN);
mWifiConfig.preSharedKey = key ;
}
try {
if (enabled) { // disable WiFi in any case
mWifiManager.setWifiEnabled(false);
}
Method method = mWifiManager.getClass().getMethod("setWifiApEnabled", WifiConfiguration.class,boolean.class);
return (Boolean) method.invoke(mWifiManager, mWifiConfig, enabled);
} catch(Exception e) {
e.printStackTrace();
return false;
}
}
这里传的参数ssid:wifi热点的名字;key:wifi热点的密码;security:加密方式有open和wpa2 psk这两种;enabled:表示设置WifiAp的开关
那么,如何关闭wifi热点呢?这就跟enabled的值有关了。如下
public boolean closeAp(){
try {
Method method = mWifiManager.getClass().getMethod("setWifiApEnabled", WifiConfiguration.class,boolean.class);
return (Boolean) method.invoke(mWifiManager, null, false);
} catch(Exception e) {
e.printStackTrace();
return false;
}
}
设置之后怎样查看wifi热点的状态呢?这里也要通过一个WifiManager的隐藏方式来获取,这个方法是getWifiApState()
//得到wifi热点当前的状态
//WIFI_AP_STATE_DISABLING = 0;
//WIFI_AP_STATE_DISABLED = 1;
//WIFI_AP_STATE_ENABLING = 2;
//WIFI_AP_STATE_ENABLED = 3;
//WIFI_AP_STATE_FAILED = 4;
public int getWifiApState() {
try {
Method method = mWifiManager.getClass().getMethod("getWifiApState");
return (Integer) method.invoke(mWifiManager);
} catch(Exception e) {
e.printStackTrace();
return WIFI_AP_STATE_FAILED;
}
}
好,到这里主要的功能需要的代码就差不多了。剩下的就是界面和存储信息的事情,应该还好。
wifi热点是将机顶盒的有线网络通过wifi来共享出来,就是将机顶盒虚拟成一个无线路由器,所以在建立wifi热点时机顶盒上的wifi状态是要关闭的,在开启热点之前要判断当前的有线连接是否是有效的,判断是否是connected。代码如下
// 判断当前是否联网,如果联网了。判断是不是eth
public boolean isAvailableEth() {
ConnectivityManager mConnManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
NetworkInfo mInfo = mConnManager.getActiveNetworkInfo();
if (mInfo != null) {
if (mInfo.isAvailable() && mInfo.isConnected() && !mInfo.getTypeName().equals("WIFI")) {
return true;
}
return false;
}
return false;
}
有关网络连接状态与connected和available的值的变化如下:
1,显示连接已保存,但标题栏没有,即没有实质连接上,输出为:not connect, available
2,显示连接已保存,标题栏也有已连接上的图标, 输出为:connect, available
3,选择不保存后 输出为:not connect, available
4,选择连接,在正在获取IP地址时 输出为:not connect, not available
5,连接上后 输出为:connect, available
public boolean setWifiApEnabled(String ssid ,String key ,String security, boolean enabled) {
mWifiConfig.SSID = ssid ;
if(security.equals("open")){
mWifiConfig.allowedKeyManagement.set(KeyMgmt.NONE);
}else{
mWifiConfig.allowedKeyManagement.set(KeyMgmt.WPA_PSK);
mWifiConfig.allowedAuthAlgorithms.set(AuthAlgorithm.OPEN);
mWifiConfig.preSharedKey = key ;
}
try {
if (enabled) { // disable WiFi in any case
mWifiManager.setWifiEnabled(false);
}
Method method = mWifiManager.getClass().getMethod("setWifiApEnabled", WifiConfiguration.class,boolean.class);
return (Boolean) method.invoke(mWifiManager, mWifiConfig, enabled);
} catch(Exception e) {
e.printStackTrace();
return false;
}
}
这里传的参数ssid:wifi热点的名字;key:wifi热点的密码;security:加密方式有open和wpa2 psk这两种;enabled:表示设置WifiAp的开关
那么,如何关闭wifi热点呢?这就跟enabled的值有关了。如下
public boolean closeAp(){
try {
Method method = mWifiManager.getClass().getMethod("setWifiApEnabled", WifiConfiguration.class,boolean.class);
return (Boolean) method.invoke(mWifiManager, null, false);
} catch(Exception e) {
e.printStackTrace();
return false;
}
}
设置之后怎样查看wifi热点的状态呢?这里也要通过一个WifiManager的隐藏方式来获取,这个方法是getWifiApState()
//得到wifi热点当前的状态
//WIFI_AP_STATE_DISABLING = 0;
//WIFI_AP_STATE_DISABLED = 1;
//WIFI_AP_STATE_ENABLING = 2;
//WIFI_AP_STATE_ENABLED = 3;
//WIFI_AP_STATE_FAILED = 4;
public int getWifiApState() {
try {
Method method = mWifiManager.getClass().getMethod("getWifiApState");
return (Integer) method.invoke(mWifiManager);
} catch(Exception e) {
e.printStackTrace();
return WIFI_AP_STATE_FAILED;
}
}
好,到这里主要的功能需要的代码就差不多了。剩下的就是界面和存储信息的事情,应该还好。
本文详细介绍了在OTT平台上创建WiFi热点AP的过程,包括如何判断网络连接状态、设置WiFi热点(支持开放和WPA2PSK两种加密方式)、关闭WiFi热点以及查看热点状态的方法。此外,还提供了关键代码片段,帮助开发者实现这一功能。
306

被折叠的 条评论
为什么被折叠?



