admin管理员组文章数量:1540710
写这篇博客前,说一些题外话:楼主是在一家做嵌入式研发的公司当然也有软件研发,总之就是以软硬件通信为主把数据展示到前端,所
以不可避免的有 wifi 蓝牙 网口 串口 等这些通信媒介,网上的wifi通信千篇一律下面我来总结我的wifi通信 ,可以负责的告诉大家这是公
司目前在用的,起码稳定是可以维持住的,欢迎大家指证。
转载请附上本文链接squery的博客链接地址: http://blog.csdn/shentanweilan9
wifi通信设计到以下3点, 当然 肯定要建立一个工具类来对外暴露这三个以上的方法
- wifi列表获取展示
- wifi连接
- 获取热点ip建立socket
wifi连接通信的工具类WifiAdmin
这个工具类中主要方法如下:
- startScan() 扫描wifi
- getWifiList() 获取wifi列表
- connectToTarget() 连接wifi 这里包含两个一种是不知道加密方式的 另一种加密方式固定 两种都需要密码
- intToIp() 转换成ip地址
整个类代码如下:
package com.pswx.squery.wifi_phone.utils;
import android.content.Context;
import android.DhcpInfo;
import android.wifi.ScanResult;
import android.wifi.WifiConfiguration;
import android.wifi.WifiInfo;
import android.wifi.WifiManager;
import android.os.Build;
import java.lang.reflect.Method;
import java.util.List;
/**
* Created by squery on 2017/8/17.
*/
public class WifiAdmin {
public static final String SSID = "test";
public static final String PassWord = "12345678";
private final DhcpInfo mDhcpInfo;
private WifiManager mWifiManager;//wifimanager 对象
private WifiInfo mWifiInfo; // 定义WifiInfo对象
private List<ScanResult> mWifiList; // 扫描出的网络连接列表
private List<WifiConfiguration> mWifiConfiguration; // 网络连接列表
WifiManager.WifiLock mWifiLock; // 定义一个WifiLock
private static final int NOPASSWORD = 0;
private static final int PASSWORD_WPA = 1;
private static final int PASSWORD_WEP = 2;
private static final int PASSWORD_WPA2 = 3;
// 构造器
public WifiAdmin(Context context) {
// 取得WifiManager对象
mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
// 取得WifiInfo对象
mWifiInfo = mWifiManager.getConnectionInfo();
mDhcpInfo = mWifiManager.getDhcpInfo();
}
//打开wifi
public void openWifi() {
if (!mWifiManager.isWifiEnabled()) {
mWifiManager.setWifiEnabled(true);
}
}
//关闭WIFI
public void closeWifi() {
if (mWifiManager.isWifiEnabled()) {
mWifiManager.setWifiEnabled(false);
}
}
//创建热点
public void createAp() {
if (mWifiManager.isWifiEnabled()) {
mWifiManager.setWifiEnabled(false);
}
try {
WifiConfiguration apConfiguration = new WifiConfiguration();
apConfiguration.SSID = WifiAdmin.SSID;
apConfiguration.preSharedKey = WifiAdmin.PassWord;
apConfiguration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
Method method = mWifiManager.getClass().getMethod("setWifiApEnabled", WifiConfiguration.class, boolean.class);
method.invoke(mWifiManager, apConfiguration, true);
} catch (Exception e) {
e.printStackTrace();
}
}
//关闭WiFi热点
public void closeWifiAp() {
if (isWifiApEnabled()) {
try {
Method method = mWifiManager.getClass().getMethod("getWifiApConfiguration");
method.setAccessible(true);
WifiConfiguration config = (WifiConfiguration) method.invoke(mWifiManager);
Method method2 = mWifiManager.getClass().getMethod("setWifiApEnabled", WifiConfiguration.class, boolean.class);
method2.invoke(mWifiManager, config, false);
} catch (Exception e) {
e.printStackTrace();
}
}
}
//热点开关是否打开
public boolean isWifiApEnabled() {
try {
Method method = mWifiManager.getClass().getMethod("isWifiApEnabled");
method.setAccessible(true);
return (Boolean) method.invoke(mWifiManager);
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
// 检查当前WIFI状态
public int checkState() {
return mWifiManager.getWifiState();
}
// 锁定WifiLock
public void acquireWifiLock() {
mWifiLock.acquire();
}
// 解锁WifiLock
public void releaseWifiLock() {
// 判断时候锁定
if (mWifiLock.isHeld()) {
mWifiLock.acquire();
}
}
// 创建一个WifiLock
public void creatWifiLock() {
mWifiLock = mWifiManager.createWifiLock("Test");
}
// 得到配置好的网络
public List<WifiConfiguration> getConfiguration() {
return mWifiConfiguration;
}
版权声明:本文标题:Android wifi通信 开发(wifi列表 +连接具体的wifi热点+socket的获取) 之 解决热点连成功的时延问题 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dongtai/1727037708a1095220.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论