现在的位置: 首页 > 综合 > 正文

Android_OTT的wifi热点建立 Android_OTT的wifi热点建立

2017年12月11日 ⁄ 综合 ⁄ 共 2394字 ⁄ 字号 评论关闭
 

Android_OTT的wifi热点建立

分类: android工作 185人阅读 评论(0) 收藏 举报
最近几天公司要求做一个建立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;
}
判断完之后,就可以设置了。有两种方式,一种是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;
        }
    }
好,到这里主要的功能需要的代码就差不多了。剩下的就是界面和存储信息的事情,应该还好。

抱歉!评论已关闭.