Android wifi通信 开发(wifi列表 +连接具体的wifi热点+socket的获取) 之 解决热点连成功的时延问题

写这篇博客前,说一些题外话:楼主是在一家做嵌入式研发的公司当然也有软件研发,总之就是以软硬件通信为主把数据展示到前端,所
以不可避免的有 wifi 蓝牙 网口 串口 等这些通信媒介,网上的wifi通信千篇一律下面我来总结我的wifi通信 ,可以负责的告诉大家这是公
司目前在用的,起码稳定是可以维持住的,欢迎大家指证。
转载请附上本文链接squery的博客链接地址: http://blog.csdn.net/shentanweilan9

wifi通信设计到以下3点, 当然 肯定要建立一个工具类来对外暴露这三个以上的方法

  • wifi列表获取展示
  • wifi连接
  • 获取热点ip建立socket

wifi连接通信的工具类WifiAdmin

这个工具类中主要方法如下:

  1. startScan() 扫描wifi
  2. getWifiList() 获取wifi列表
  3. connectToTarget() 连接wifi 这里包含两个一种是不知道加密方式的 另一种加密方式固定 两种都需要密码
  4. intToIp() 转换成ip地址

整个类代码如下:

package com.pswx.squery.wifi_phone.utils;

import android.content.Context;
import android.net.DhcpInfo;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiInfo;
import android.net.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;
    }
  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值