本文中所用到的方法,在MT6582平台、API19测试可行,其它平台不一定可以,要具体测。
附一个MT6582源码的链接https://github.com/CM-Huawei/Source_MT6582。
下面我把我封装的热点管理类贴出来,可以实现热点相关的所有功能(除了设置最大允许连接数和一定时间无设备连接后关闭热点的功能),包括打开、关闭热点,设置热点名称、密码,禁用、解除禁用某个设备。
注:
1.HotspotClient类,在源码中放在android.net.wifi包下,所以新建android.net.wifi的包用来存放,否则可能会出问题;
2.这里面好几个方法我都是通过遍历WifiManager的所有方法获取的,因为我在直接获取的时候总会报NoSuchMethodException,不明白原因;
3.使用的时候,mWifiManager根据自己项目的实际情况不要忘记初始化就好。
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
import android.util.Log;
import android.net.wifi.HotspotClient;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiManager;
public class HotspotManager {
private static final String Tag = "HotspotManager";
public static WifiManager mWifiManager;
/**
* 设置热点状态,会对应的打开或关闭WiFi
*
* @param state
* 要设置的状态
* @param ssid
* 热点名称,can be null
* @param pwd
* 热点密码,can be null
* @return 设置成功与否
*/
public static boolean setHotPotState(boolean state, String ssid, String pwd) {
boolean isOpened = isHotPotTurnedOn();
if (state == isOpened) {
Log.i(Tag, "-> Set state is equal with hotpot state!");
return false;
}
Log.i(Tag, "set hot pot state : " + state);
try {
WifiConfiguration apConfig = getHotPotConfig();
// 通过反射调用设置热点
Method method = WifiManager.class.getMethod("setWifiApEnabled", WifiConfiguration.class, boolean.class);
mWifiManager.setWifiEnabled(!state);
if (ssid != null) {
apConfig.SSID = ssid;
}
if (pwd != null) {
apConfig.preSharedKey = pwd;
}
return (boolean) method.invoke(mWifiManager, apConfig, state);
} catch (Exception e) {
Log.e(Tag, "Set hot pot " + state + " got exception : " + e.getLocalizedMessage());
return false;
}
}
/**
* 热点是否打开
* @return
*/
public static boolean isHotPotTurnedOn() {
try {
Method method = mWifiManager.getClass().getDeclaredMethod("isWifiApEnabled");
// 调用getWifiApState() ,获取返回值
return (boolean) method.invoke(mWifiManager);
} catch (Exception e) {
Log.i(Tag, "Get hot pot state exception -> " + e.getLocalizedMessage());
return false;
}
}
/**
* 获取当前热点的配置参数
*
* @return
*/
public static HotspotParam getHotPotParams() {
try {
HotspotParam param = new HotspotParam();