Android_OTT的wifi热点建立

本文详细介绍了在OTT平台上创建WiFi热点AP的过程,包括如何判断网络连接状态、设置WiFi热点(支持开放和WPA2PSK两种加密方式)、关闭WiFi热点以及查看热点状态的方法。此外,还提供了关键代码片段,帮助开发者实现这一功能。
最近几天公司要求做一个建立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;

}


有关网络连接状态与connected和available的值的变化如下:

1,显示连接已保存,但标题栏没有,即没有实质连接上,输出为:not connect, available
2,显示连接已保存,标题栏也有已连接上的图标,      输出为:connect, available
3,选择不保存后                                    输出为:not connect, available
4,选择连接,在正在获取IP地址时                    输出为:not connect, not available
5,连接上后                                        输出为:connect, available


判断完之后,就可以设置了。有两种方式,一种是OPEN方式,即建立的wifi热点无需密码就可以登录,第二种是WPA2 PSK方式,即建立的wifi热点需要密码才可以登录。在开启热点的时候主要用到了WifiManager的隐藏方法setWifiApEnabled() ,该方法可以通过反射的方法来得到或者直接调用然后在源码环境下编译工程,这里我是用的反射的方法:
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;
        }
    }
好,到这里主要的功能需要的代码就差不多了。剩下的就是界面和存储信息的事情,应该还好。















评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值