在android上,实现打开ap热点功能,记录一下过程中遇到的问题;

package com.test;import android.content.Context;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiManager;import java.lang.reflect.Method;public class WifiUtils {private WifiManager wifiManager = (WifiManager) ContextUtils.getApplicationContext().getSystemService(Context.WIFI_SERVICE);private boolean isWifiEnabled() {return wifiManager.isWifiEnabled();}/*** 是否打开共享热点*/private boolean isWifiApEnabled() {try {Method method = wifiManager.getClass().getMethod("isWifiApEnabled");method.setAccessible(true);return (Boolean) method.invoke(wifiManager);} catch (Exception e) {e.printStackTrace();}return false;}/*** 是否打开指定共享热点:名称和密码*/private boolean isWifiApEnabled(String ssid, String password) {boolean ret = isWifiApEnabled();if (!ret) {return false;}WifiConfiguration wifiConfig = getWifiApConfiguration();String apName = wifiConfig.SSID;String apPassword = wifiConfig.preSharedKey;// TODO 可能要注意引号等特殊字符return ssid.equals(apName) && password.equals(apPassword);}/*** 获取AP热点配置信息*/private WifiConfiguration getWifiApConfiguration() {try {Method method = wifiManager.getClass().getMethod("getWifiApConfiguration");method.setAccessible(true);return (WifiConfiguration) method.invoke(wifiManager);} catch (Exception e) {e.printStackTrace();}return null;}private WifiConfiguration createWifiApConfiguration(String ssid, String password) {WifiConfiguration wifiConfig = new WifiConfiguration();wifiConfig.SSID = ssid;// 热点名称wifiConfig.preSharedKey = password;// 热点密码wifiConfig.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);/*** WPA2_PSK=4,比WPA安全性更高* 在android 4.4 上设置,无效:Invalid WifiConfiguration* 在android 6   上设置,有效*/// wifiConfig.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA2_PSK);wifiConfig.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);wifiConfig.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);wifiConfig.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);wifiConfig.allowedProtocols.set(WifiConfiguration.Protocol.WPA);return wifiConfig;}private boolean setWifiApConfiguration(WifiConfiguration wifiConfig) {try {Method method = wifiManager.getClass().getMethod("setWifiApConfiguration", WifiConfiguration.class);return (Boolean) method.invoke(wifiManager, wifiConfig);} catch (Exception e) {e.printStackTrace();}return false;}private boolean setWifiApEnabled(WifiConfiguration wifiConfig, boolean enabled) {try {// TODO WifiManager.setWifiApEnabled()已经被废弃;在android 7以上,需要替换为ConnectivityManager.startTethering()Method method = wifiManager.getClass().getMethod("setWifiApEnabled", WifiConfiguration.class, Boolean.TYPE);return (Boolean) method.invoke(wifiManager, wifiConfig, enabled);} catch (Exception e) {e.printStackTrace();}return false;}/*** 打开热点*/public void openAp(String apSsid, String apPassword) {if (isWifiApEnabled(apSsid, apPassword)) {// 1.指定ap已经打开,名称和密码一致return;} else {// 2.指定ap没有打开// 2.1.关闭热点if (isWifiEnabled()) {wifiManager.setWifiEnabled(false);} // 【注意:如果已经打开ap热点,名称和密码不一致,则需要先关闭AP热点,重新设置AP配置,然后再次打开AP热点】// 2.2.关闭ap热点WifiConfiguration wifiConfig = createWifiApConfiguration(apSsid, apPassword);if (isWifiApEnabled()) {setWifiApEnabled(wifiConfig, false);}// 2.3.重新设置ap配置setWifiApConfiguration(wifiConfig);// 2.4.打开ap热点setWifiApEnabled(wifiConfig, true);}}public void closeAp(String apSsid, String apPassword) {// TODOWifiConfiguration wifiConfig = createWifiApConfiguration(apSsid, apPassword);setWifiApEnabled(wifiConfig, false);}public void test() {String apSsid = "test";String apPassword = "12345678";openAp(apSsid, apPassword);closeAp(apSsid, apPassword);}}

参考:

系统setting,Wifi模块WifiStateMachine.java

https://blog.csdn.net/bukker/article/details/78649504

android 打开ap热点相关推荐

  1. Android获取AP热点IP,获取连接到本机AP热点设备的IP地址

    Android系统是基于Linux的,所连接的设备的一些信息保存在了  /proc/net/arp 文件中. 下面直接上我编写的程序,当前手机开启AP后,点击按钮直接获取连接到本热点的IP,然后显示在 ...

  2. android 10.0 监听Soft Ap热点连接与断开

    1.概述 在10.0的系统产品开发中,在定制化银行设备时,需要设备开机后打开热点,然后监听顾客连接设备和断开设备 那么SoftApManager.java 就主要负责热点连接的管理,就需要分析它的相关 ...

  3. 【转】Android 设置Wifi热点、打开与关闭的监听

    原文地址:http://blog.csdn.net/u011520181/article/details/46496377 用过360的面对面快传,快牙的朋友应该都知道,它们在两台设备间实现文件传输都 ...

  4. Android 设置Wifi热点、打开与关闭的监听

    用过360的面对面快传,快牙的朋友应该都知道,它们在两台设备间实现文件传输都是通过WiFi热点实现的,下面我们就来探讨一下如何设置热点名和密码,并自动创建一个wifi热点吧,以及如何监听热点的打开与关 ...

  5. 安卓9[Android P]打开/关闭热点

    前言 网络相关工具库方法 功能 1.打开热点 代码如下(示例): /*** 打开WiFi热点* @param context*/public static void startTethering(Co ...

  6. (九十七)Android O WiFi热点 开启流程梳理续(二)

    前言:从之前WiFi的连接流程可以知道WiFi最后一步会和服务端进行dhcp以获取ip地址,那么WiFi热点开启的时候应该也要配置相关dhcp属性,以供后续WiFi连接的时候ip分配,根据这块流程继续 ...

  7. TX2(Ubuntu16.04)安装TP-link外接网卡驱动及AP热点创建

    TX2(Ubuntu16.04)安装TP-link外接网卡驱动及AP热点创建 1.驱动安装篇 由于TX2板载WIFI的AP模式存在诸多问题,故采用usb网卡建立AP热点 查看usb网卡型号 lsusb ...

  8. 迅为-iMX6ULL开发板上配置AP热点

    开发板连接好电源和调试串口,然后打开调试串口终端,然后给开发板上电,等待系统启动 完成,如图 99.6.1 所示: 然后把第五章制作好的 U 盘插入开发板的 USB 接口,可以看到串口打印出 USB ...

  9. [教程]北京迅为iMX6ULL开发板上配置 AP 热点

    本文转自迅为iMX6ULL开发板使用手册第九十九章,使用的资料已经放到了开发板网盘资料中,路径为:11_Linux 系统开发进阶\99_章节使用资料. 关注公众号"迅为电子" , ...

最新文章

  1. linux chattr命令
  2. php 前端页面的路由,ThinkPHP5路由
  3. 【Java 注解】自定义注解 ( 注解解析 )
  4. php连接mssql的一些方法总结
  5. jdbc事务 jta事务_将非事务性资源绑定到JTA事务中的几种模式
  6. ASP.NET MVC教程八:_ViewStart.cshtml
  7. 了解 MongoDB 看这一篇就够了
  8. 组态王怎么做进度条_3分钟学会超实用||进度条amp;游戏血条的制作方法!
  9. MYSQL5.5.48编译安装
  10. windows2003 序列号
  11. 实战演练 | Navicat Premium 轻松连接阿里云云数据库
  12. apache 在windows下无法启动的一个错误
  13. python字符串修改
  14. 《Windows 8 权威指南》——2.7 降低功耗,延长续航时间才是王道
  15. Windows中Nginx下载、安装、配置
  16. 一家之言:中国IT人员创业存在的问题
  17. C语言删除链表的倒数第N个节点
  18. 学软件测试最好的几本书,这8本书能帮你很多
  19. “无剑胜有剑”软件大师之路的一点探索
  20. 数据结构——电话本-顺序表

热门文章

  1. steam怎么设置邮箱令牌_steam收不到邮箱令牌验证码怎么办 这些知识你不一定知道...
  2. 笔记本每次启动都会先黑屏1分钟再启动问题解决
  3. 新路由2VS斐讯k2,这样的“0元购”你还买么?
  4. 面向微服务架构与传统架构、SOA对比,以及云化对比
  5. 笔记本/台式机作为扩展屏
  6. 谷歌学术we are sorry/拉黑/报错自动查询过多
  7. PHP服务器 支付宝 对接出现 【交易订单处理失败 请稍后再试 ALI38173】
  8. html--P11-P20
  9. 2021-06-22 离散数学图论复习笔记
  10. Excel(WPS)使用VBA,不打开文件情况下提取其他工作簿数据