之前查了好多大牛的博客,总结了一下。
把代码分享给大家。
功能:创建热点、获取热点名、检查是否开启wifi热点、关闭热点、开热点手机获取其他连入手机IP地址
想了解wifi开发的,看我的下一篇文章。 http://blog.csdn.net/guang_liang_/article/details/55224757
public class Wifi_APManager {
private WifiManager mWifiManager;
private Context mContext;
public Wifi_APManager(Context context){
this.mContext=context;
mWifiManager=(WifiManager)context.getSystemService(Context.WIFI_SERVICE);
}
/**
* 创建热点
* @param mSSID 热点名称
* @param mPasswd 热点密码
* @param isOpen 是否是开放热点
*/
public void startWifiAp(String mSSID,String mPasswd,boolean isOpen){
Method method1=null;
try {
method1=mWifiManager.getClass().getMethod("setWifiApEnabled",
WifiConfiguration.class,boolean.class);
WifiConfiguration netConfig=new WifiConfiguration();
netConfig.SSID=mSSID;
netConfig.preSharedKey=mPasswd;
netConfig.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);
netConfig.allowedProtocols.set(WifiConfiguration.Protocol.RSN);
netConfig.allowedProtocols.set(WifiConfiguration.Protocol.WPA);
if (isOpen) {
netConfig.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
}else {
netConfig.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
}
netConfig.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
netConfig.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
netConfig.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
netConfig.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
method1.invoke(mWifiManager,netConfig,true);
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
/**获取热点名**/
public String getApSSID() {
try {
Method localMethod = this.mWifiManager.getClass().getDeclaredMethod("getWifiApConfiguration", new Class[0]);
if (localMethod == null) return null;
Object localObject1 = localMethod.invoke(this.mWifiManager,new Object[0]);
if (localObject1 == null) return null;
WifiConfiguration localWifiConfiguration = (WifiConfiguration) localObject1;
if (localWifiConfiguration.SSID != null) return localWifiConfiguration.SSID;
Field localField1 = WifiConfiguration.class .getDeclaredField("mWifiApProfile");
if (localField1 == null) return null;
localField1.setAccessible(true);
Object localObject2 = localField1.get(localWifiConfiguration);
localField1.setAccessible(false);
if (localObject2 == null) return null;
Field localField2 = localObject2.getClass().getDeclaredField("SSID");
localField2.setAccessible(true);
Object localObject3 = localField2.get(localObject2);
if (localObject3 == null) return null;
localField2.setAccessible(false);
String str = (String) localObject3;
return str;
} catch (Exception localException) {
}
return null;
}
/**
* 检查是否开启Wifi热点
* @return
*/
public boolean isWifiApEnabled(){
try {
Method method=mWifiManager.getClass().getMethod("isWifiApEnabled");
method.setAccessible(true);
return (boolean) method.invoke(mWifiManager);
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return false;
}
/**
* 关闭热点
*/
public void closeWifiAp(){
WifiManager wifiManager= (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE);
if (isWifiApEnabled()){
try {
Method method=wifiManager.getClass().getMethod("getWifiApConfiguration");
method.setAccessible(true);
WifiConfiguration config= (WifiConfiguration) method.invoke(wifiManager);
Method method2=wifiManager.getClass().getMethod("setWifiApEnabled",WifiConfiguration.class,boolean.class);
method2.invoke(wifiManager,config,false);
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
/**
* 开热点手机获得其他连接手机IP的方法
* @return 其他手机IP 数组列表
*/
public ArrayList<String> getConnectedIP(){
ArrayList<String> connectedIp=new ArrayList<String>();
try {
BufferedReader br=new BufferedReader(new FileReader(
"/proc/net/arp"));
String line;
while ((line=br.readLine())!=null){
String[] splitted=line.split(" +");
if (splitted !=null && splitted.length>=4){
String ip=splitted[0];
if (!ip.equalsIgnoreCase("ip")){
connectedIp.add(ip);
}
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return connectedIp;
}
}