Android关于WiFi以及WiFi热点操作

Android热点连接管理(一) Android手机上的wifi功能,多半都被当做客户端在使用。 当做热点共享网络时的场景比较少。 最近做一个尝试,将所有试图连接到Android便携热点的客户端的信息,通过底层一直上报上来 最终增加API供上层应用调用。 在原生的Android代码中,其实已经有一个WifiDevice类来表示当前连接至wifi热点的客户端信息,我们先来看一下这个类是怎样定义的。 阅读详情

最近做WiFi方面需求,遇到一个问题就是连接扫描的的热点总是连接不上(不经加密的),代码如下:

    /*连接到热点*/
    public void connectToHotpot(){
        List<ScanResult> results = mWifiManager.getScanResults();
        for (ScanResult result : results){
            if (result.SSID.contains("zeus")){
                WifiConfiguration wifiConfig = new WifiConfiguration();
                wifiConfig.SSID = result.SSID;
                int wcgID = mWifiManager.addNetwork(wifiConfig);
                mWifiManager.enableNetwork(wcgID, true);
                break;
            }
        }

    }
先获取一下附近WiFi列表,如果是需要连接的WiFi,就去连接,但是执行了mWifiManager.enableNetwork(wcgID, true);这句话以后并没有连接上,(手动连接一次以后就可以自动连接了),后来在帖子上看到了答案,正确代码如下:

    /*连接到热点*/
    public void connectToHotpot(){
        List<ScanResult> results = mWifiManager.getScanResults();
        for (ScanResult result : results){
            if (result.SSID.contains("zeus")){
                WifiConfiguration wifiConfig = new WifiConfiguration();
                wifiConfig.SSID = result.SSID;
                wifiConfig.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
                wifiConfig.wepTxKeyIndex = 0;
                int wcgID = mWifiManager.addNetwork(wifiConfig);
                mWifiManager.enableNetwork(wcgID, true);
                break;
            }
        }

    }
因为当时创建热点是不加密的,也就是开放的,这里enableNetwork的时候也需要去明确一下加密方式为none,源码中WiFi的加密方式有以下几种:

 /** WPA is not used; plaintext or static WEP could be used. */
        public static final int NONE = 0;
        /** WPA pre-shared key (requires {@code preSharedKey} to be specified). */
        public static final int WPA_PSK = 1;
        /** WPA using EAP authentication. Generally used with an external authentication server. */
        public static final int WPA_EAP = 2;
        /** IEEE 802.1X using EAP authentication and (optionally) dynamically
         * generated WEP keys. */
        public static final int IEEE8021X = 3;

        /** WPA2 pre-shared key for use with soft access point
          * (requires {@code preSharedKey} to be specified).
          * @hide
          */
        public static final int WPA2_PSK = 4;
下面是创建热点的代码:

 /** set WiFi hot spot is enableed */
    private boolean setWifiApEnabled(WifiConfiguration configuration, boolean enabled)
    {
        try
        {
            if (enabled)
            {
                mWifiManager.setWifiEnabled(false);
            }

            Method method = mWifiManager.getClass().getMethod("setWifiApEnabled",
                WifiConfiguration.class, boolean.class);
            return (Boolean) method.invoke(mWifiManager, configuration, enabled);
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }

        return false;
    }

开启热点是需要反射的,因为setWifiApEnable方法在源码中是@hide的,目前并不对外开放:

    /**
     * Start AccessPoint mode with the specified
     * configuration. If the radio is already running in
     * AP mode, update the new configuration
     * Note that starting in access point mode disables station
     * mode operation
     * @param wifiConfig SSID, security and channel details as
     *        part of WifiConfiguration
     * @return {@code true} if the operation succeeds, {@code false} otherwise
     *
     * @hide Dont open up yet
     */
    public boolean setWifiApEnabled(WifiConfiguration wifiConfig, boolean enabled) {
        try {
            mService.setWifiApEnabled(wifiConfig, enabled);
            return true;
        } catch (RemoteException e) {
            return false;
        }
    }

但是,好像是有个例外,htc的手机开启热点需要特殊处理一下:

 /** enable and disable htc WiFi hotspot, 2013-12-31 add special for htc */
    private boolean enableHtcHotspot(WifiConfiguration apConfig, boolean enable)
    {

        Method method = null;
        try
        {
            method = mWifiManager.getClass().getMethod("setWifiApEnabled",
                WifiConfiguration.class, Boolean.TYPE);
        }
        catch (NoSuchMethodException e)
        {
            e.printStackTrace();
        }
        // 返回热点打开状态
        boolean flag = false;
        try
        {
            flag = (Boolean) method.invoke(mWifiManager, apConfig, enable);
        }
        catch (IllegalArgumentException e)
        {
            flag = false;
            e.printStackTrace();
        }
        catch (IllegalAccessException e)
        {
            flag = false;
            e.printStackTrace();
        }
        catch (InvocationTargetException e)
        {
            flag = false;
            e.printStackTrace();
        }

        return flag;
    }

因为也是初次接触WiFi方面,所以遇到的问题比较多,需要注意的点:

1、加密方式,连接的时候一定要明确创建热点时使用的加密方式。

2、注意热点和WiFi是不能同时开的。

以上是自己遇到的坑,记录一下,关于WiFi这块周末研究一下。






Android自定义连接指定WiFi&热点开关 Android自定义连接指定WiFi&热点开关连接WiFi热点开关 连接WiFi 目的:可通过接受用户输入WiFi SSID、密码、密码类型控制设备连接至该WiFi 步骤:开启WiFi、启动WiFi网络搜索、连接WiFi 具体实现方式: (1)启用WIFI:检查设备目前是否已开启WiFi,如果未开启则开启WiFi,如果已开启并且处于已连接状态,则先断开当前连接,随后注册广播监听WiFi状... 阅读详情

相关推荐

解决用VScode写中文注释,Vivado打开之后是乱码的方法

这样就解决了中文注释乱码的问题,此外如果使用notepad++写verilog代码的话直接在notepad++上面将编码格式改为ANSI格式即可,更加方便快捷,所以此方法仅针对习惯用VScode写Verilog的同学,如果有其他好办法的话欢迎评论区补充。首先,VScode中的中文默认编码格式是UTF-8,然后Vivado的编码格式是vivado 默认的应该是ANSI编码格式,刚开始我先按照网上说明的,将VScode中的编码格式改为GBK格式(点击右下角->点击通过编码保存)。

weixin_50573305的博客 5809

app优先移动数据/wifi

对于部分需求,如在插sim卡的时候依然想让手机走wifi局域网,可以如下实现: ConnectivityManager connMgr = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE); // mWifiManager很容易获得 Network netWork = mWifiManager.getCurrentN

weishengwen2的博客 1296

Windows 下安装 ros2 的超详细教程

Windows11 ROS安装

2401_83363439的博客 3317

Android 获取当前连接的WiFi信息

package com.lenovo.xiaoshan.test; import android.app.Activity; import android.bluetooth.BluetoothAdapter; import android.content.Context; import android.content.Intent; import android.net.wifi.WifiIn

好书推荐 7845

3.1使用Python读取excel的二维数据

要使用 Python 读取 Excel 的二维数据,可以使用 openpyxl 或 pandas 库。

kenshin1980的专栏 1032

Conformal LEC逻辑等价性检查介绍和参考脚本

分为三个产品:Conformal L、Conformal XL、Conformal GXL。L是功能性检查,XL支持复杂数据通路的综合和APR优化,GXL支持定制的stdcell和定制memory的检查。Cadence Conformal Equivalence Checker,就是常说的LEC,可以用来验证RTL、门级网表、甚至spice网表的逻辑等价性。do文件是conformal的脚本文件,可以由综合工具(RTL Compiler/Genus)自己产生(write_do_lec),也可以手写。

NanDigits的博客 7246

Android WiFi热点监听

1、注册广播,使用广播监听WiFi热点状态 IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction("android.net.wifi.WIFI_AP_STATE_CHANGED"); registerReceiver(new HotsspotReceiver(), intentFilter); 2、创建广播进行监听状态 class HotsspotReceiver extends

qq_46290634的博客 931

c#源码,将矩阵(二维数组)渲染成云图,强度图,热力图,均匀性图,伪彩图

优快云软件0积分下载链接:https://download.csdn.net/download/wanghuannihao1992/86656759。6、渲染效果良好,颜色均匀分布,不存在等高线,交叉点。3、纯粹的C#代码编写,不含第三方dll或者控件。4、支持ColorBar显示,强度值颜色坐标显示。2、渲染时间60ms左右,速度快,1、二维数据最小支持2*2,7、采样全新数据插值算法。先直接上C#软件效果图。5、整图保存为单个图片。

业余程序员小徐的博客 6880

android 打开ap热点

在android上,实现打开ap热点功能,记录一下过程中遇到的问题;package com.test; import android.content.Context; import android.net.wifi.WifiConfiguration; import android.net.wifi.WifiManager; import java.lang.reflect.Method; ...

yhtppp的专栏 3752

天地图下载带审图号(审图号: GS(2024)0650号)的 “行政区划” 数据(含shp文件下载地址)

在科研投稿论文过程中,多数期刊杂志要求我们制作涉及国界的图件,必须使用自然资源部地图技术审查中心发布的标准地图底图。如地理学报、地理科学等期刊的投稿指南中写到:非标准底图本刊不予发表!(如图1.1所示)如果一定要用,凡涉国界图件(国内部分地区、全国、世界部分地区、全球)必须使用自然资源部标准地图服务系统标准地图底图(http://bzdt.ch.mnr.gov.cn/)(如图1.1所示)或国家测绘局地理信息局标准地图底图(如图1.2所示),所用底图边界要完全无修改(包括南海诸岛位置)。

JData_Engineer的博客 2302

Ascend开发包Acllite安装

设置环境变量,配置程序编译依赖的头文件,库文件路径。“$HOME/Ascend”请替换“Ascend-cann-toolkit”包的实际安装路径。将YOLOV7原始模型转换为适配昇腾310处理器的离线模型(*.om文件),放在model路径下。运行完成后,会在样例工程的out目录下生成推理后的图片,显示对比结果如下所示。可以使用以下两种方式下载,请选择其中一种进行源码准备。请从以下链接获取该样例的输入图片,放在data目录下。执行以下命令,执行编译脚本,开始样例编译。执行运行脚本,开始样例运行。

如果想成为中心,那么就到中心去吧。 317

Android 开发 创建WiFi、WiFi热点、蓝牙——操作集合

WIFI 权限 &lt;uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /&gt; &lt;uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /&gt; &lt;uses-permission a...

qq_37217804的博客 1734

USB_TYPE-C 母座电路设计

本文详细介绍了USB Type-C接口(C2765186)的电路设计要点,重点解析了电源、识别和数据三部分的关键连接方案。电源部分需并联VBUS和GND引脚并加宽走线以承载3A电流;识别部分必须为CC1/CC2引脚配置5.1kΩ±1%精度的下拉电阻,这是触发PD充电的核心条件;数据部分通过短接正反插引脚实现盲插功能。文档还提供了完整的引脚对照表,并强调PCB布局需注意ESD防护、差分走线阻抗控制等要点,为Type-C接口设计提供了实用指导。

在读研究生,FPGA电路设计与功能开发。 581

android连接wifi热点的操作

android的wifi包其实并不复杂,就只有那么几个类,最常用的类就是WifiManager、WifiConfiguration、ScanResult、WifiInfo 这里我总结一下连接wifi的代码,供以后查阅: 主要的逻辑代码: package dxd.netcheck.test; import java.util.ArrayList; import java.util.Iterat

Main_Stage的专栏 2084

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

android wifi操作,热点创建

手机作为一种移动设备,自然是十分依赖Wifi的,通过

qndroid的专栏 1412

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Android7.1之WIFI热点问题

链接: https://notes.z-dd.online/2020/07/19/Android7.1%E4%B9%8BWIFI%E7%83%AD%E7%82%B9%E9%97%AE%E9%A2%98/有的机型可以通过Wifimanager的方式进行开启,也能正常连接,但是有的能开启但是无法正常连接.在Android7.1及后面的版本,主要是通过ConnectivityManager的startTethering方法来操作的。不同的Android版本操作热点的方式还不一样。来源: DD'Notes。

DD'Notes 827

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

android wifi讲解,android wifi讲解 wifi列表显示

addNetwork(WifiConfiguration config) 添加一个config描述的WIFI网络,默认情况下,这个WIFI网络是DISABLE状态的。calculateSignalLevel(int rssi , int numLevels) 计算信号的等级compareSignalLevel(int rssiA, int rssiB) 对比网络A和网络B的信号强度createWi...

weixin_36324960的博客 803

Android使用wifi Ap核心类

package com.example.wifihotspot2; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.Iterator; import java.util.List; import android.content.Context; import android

qdb 940

android wifi讲解 wifi列表显示

1.怎样获取wifi对象并进行操作 要操作WIFI设备,需要先获取Context.getSystemService(Context.WIFI_SERVICE)来获取WifiManager对象,并通过这个对象来管理WIFI设备。   addNetwork(WifiConfiguration config) 添加一个config描述的WIFI网络,默认情况下,这个WIFI网络是DIS

我的博客 972

Android开发之扫描附近wifi热点并列表显示

 近期项目中用到了wifi模块。今天做一个简单的总结。 參考:http://www.2cto.com/kf/201310/253617.html 1.如何获取wifi对象并进行操作 要操作WIFI设备,须要先获取Context.getSystemService(Context.WIFI_SERVICE)来获取WifiManager对象。并通过这个对象来管理WIFI设备。 ...

weixin_33720956的博客 433

android wifi热点地址,Android网络相关(WiFi的开关,WiFi热点的开关,获取手机IP地址等)...

下面是一个跟安卓网络相关的工具类,里面包含了一些很经常使用的功能,如WiFi的开关,WiFi热点的开关,获取手机IP地址等……javaimport android.content.Context;import android.net.ConnectivityManager;import android.net.NetworkInfo;import android.net.wifi.WifiConf...

weixin_39736150的博客 313

Android热点、WiFi、蓝牙等功能开启和关闭

Android热点、WiFi、蓝牙等功能开启和关闭 1、需要添加权限,选择自己需要的添加,热点的开启和关闭可能还需要权限; <!--设备(亮屏)权限--> <user-permission android:name="android.permission.DEVICE_POWER" /> <!--息屏权限--> <uses-permission andro......

feng海涛 6356

android 下的wifi使用

原文:http://cache.baiducontent.com/c?m=9f65cb4a8c8507ed4fece763105392230e54f7636d918d027fa3c215cc7902155a66e1b826211219d3c27d6302aa5e5c9daa702d691765eadb9e871981edd27574de3035000bf63105a71ab8ba4c32b2238

dingqiang305的专栏 844

android wifi应用

1.怎样获取wifi对象并进行操作 要操作WIFI设备,需要先获取Context.getSystemService(Context.WIFI_SERVICE)来获取WifiManager对象,并通过这个对象来管理WIFI设备。   addNetwork(WifiConfiguration config) 添加一个config描述的WIFI网络,默认情况下,这个WIFI网络是DIS

IT_醉仙的专栏 814

【移动开发】Android中WIFI开发总结(一)

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://smallwoniu.blog.51cto.com/3911954/1334951        WIFI就是一种无线联网技术,常见的是使用无线路由器。那么在这个无线路由器的信号覆盖的范围内都可以采用WIFI连接的方式进行联网。如果无线路由器连接了一个ADSL线路

killcwd的专栏 630

打开wifi热点以及连接wifi

添加权限 打开wifi热点: package test.sam; public class HelloanActivity extends Activity implements View.OnClickListener { private TextView textView = null; private WifiManager wifiManager = null;

落埃无蒂的专栏 1920
上一篇: android intent MIME type
下一篇: Ubuntu 16.04下安装Android studio 中文乱码问题
杨鑫校
博客等级 码龄11年 24粉丝 113原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值