1. 程式人生 > >Android關於WiFi以及WiFi熱點操作

Android關於WiFi以及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以及WiFi熱點操作

最近做WiFi方面需求,遇到一個問題就是連線掃描的的熱點總是連線不上(不經加密的),程式碼如下: /*連線到熱點*/ public void connectToHotpot(){ List<ScanResult> results

ubuntu 18.04 設定wifi熱點的手機端接收解決方案以及開機自啟動命令

    本人電腦系統 ubuntu 18.04,最近想把電腦做成wifi熱點發布無線訊號,這樣就可以在房間內悠哉悠哉使用無線,主要是增強了訊號,手機上網再不卡噸.基本操作    1.首先輸入ubuntu內建的wifi視窗命令 nm-connection-editor,調出wi

android4.4自己動手連線wifi熱點以及建立wifi熱點

package com.kaka.connector; import java.util.List; import java.util.ArrayList; import android.app.Activity; import android.content.Context; import android.

[Android] 安卓開啟WIFI熱點程式碼 以及6.0開啟熱點報錯/異常解決方法

前提是程式能在4.4 5.1 正常跑哦 6.0多加一個許可權即可 <uses-permission android:name="android.permission.WRITE_

android 生成wifi熱點以及掃描連線wifi

前段時間,有個朋友找我。做個小專案,就是可以生成wifi熱點,然後給二維碼給其他手機連線。那麼這個專案就包括功能有:wifi連線,生成wifi熱點,生成二維碼,掃描二維碼進行wifi連線。裡面用到了zxing這個庫。1,圖片展示2,生成wifi熱點/** * 建立熱點 *

tomcat工作原理以及詳解操作

tomcat的工作原理及安裝mkdir /cdrom#創建掛載目錄mount -o loop tomcat.iso /cdromcp -a /cdrom/* .mkdir -p /ly/wwwtar -xf jdk-7u25-linux-i586.gz tar -xf apache-tomcat-7.0.42

Linux操作系統的安裝以及基本的操作命令詳解

tomcat7 replicat rem 命令詳解 onf 日誌文件 out 橋接 ati 背景:使用的虛擬機安裝Linux 虛擬機使用的是VMware Linux版本:CentOS-6.7-X86 自行下載:CentOS-6.7-x86_64-bin-DVD1.

Windows下常用的100個CMD指令以及常見的操作

ron 前景 計劃任務 net view 次數 將不 -o dos系統 子目錄 gpedit.msc—–組策略   2. sndrec32——-錄音機   3. Nslookup——-IP地址偵測器 ,是一個 監測網絡中 DNS 服務器是否能正確實現域名解析的命令行工具

關於 win10 創建WiFi熱點 問題

reac nbsp 正常 set header inf 啟動 最好 新版 電腦創建WiFi,一般三種辦法: 1. WiFi共享軟件:獵豹wifi、wifi共享精靈、wifi共享大師..... 2. 命令提示符 netsh wlan set hostednetwork mo

關於js 淺拷貝 深拷貝 以及賦值操作

進行 deep 都是 包括 是否 個數 實現 拷貝 return 最近同事又碰到關於深淺拷貝以及賦值的問題,今天我也研究一下記錄一下,加深一下記憶。   舉一個簡單的例子:   var people = {     age:10,     name:"小華",     ar

mongodb安裝配置以及其他基礎操作

mongodb最近公司有個項目要用mongodb,之前沒搞過,今天臨時磨刀上陣,花了半天時間研究,中間有遇到幾個坑寫出來分享給大家。tar -zxf mongodb-linux-x86_64-v3.6.3.tgzcp -pr mongodb-linux-x86_64-v3.6.3 /usr/local/mon

Ubuntu系統如何共享WIFI熱點

共享WIFI熱點 Ubuntu Ubuntu系統WIFI熱點 系統:Ubuntu Mate 17.10問題描述:寢室只有有線網絡,而手機上又想用WiFi,但Ubuntu系統中沒有現成的WiFi共享軟件; 解決方案:選中系統右上角的網絡管理器,在下拉的菜單中選中Edit Connection選項;在

樹莓派創建WiFi熱點

開機 iproute util 使用 TP wifi ins clone reat 將代碼clone到本地 git clone https://github.com/oblique/create_ap cd create_ap make install 安裝依賴的庫 有些源

筆記本設置wifi熱點

network work show 熱點 art code stop lan allow 設置: netsh wlan set hostednetwork mode=allow ssid=賬號 key=密碼 開啟: netsh wlan start hos

Linux系統基礎知識(二)基於linux系統下的用戶管理操作以及文件操作補充

c99 數據塊 upa 系統數據 精確 passwd 列表 sudo 3.4 1、(思考)系統中為什麽要有用戶 1.1用戶??系統中最底層的安全設定,回收(限制)權利。1.2組??共享權利。分為以下兩種:??(1)附加組:由用戶決定的組(每個用戶不一定都有);??(2)初始

查找nginx安裝的路徑以及相關安裝操作命令

cor clas 顯示 操作 nginx安裝 行記錄 font nginx版本號 nginx 1、查看nginx安裝目錄 輸入命令 # ps -ef | grep nginx 返回結果包含安裝目錄 root 2662 1 0 07:12 ?

win10 系統 wifi自動斷開連接 wifi熱點不穩定

允許 穩定 http 一個 輸入 image win10系統 src 更換 我的系統的電腦是win10系統,筆記本 下載了一個wifi共享大師,但是wifi總是自動斷,於是就找了找問題所在 在網上看了許多方案,大多數都是 在 電源管理 把【允許計算機關閉此設

微信獲取AccessToken以及選單的操作

過了兩三天開始寫微信的第二個博文,最近有點瘋狂,將近兩天的時間寫了快20篇博文,以後要將缺失的博文補回來。好了,開始說微信獲取AccessToken以及選單的操作。 獲取AccessToken的原因很簡單,因為呼叫微信的介面都需要AccessToken,每天獲取accessToken的次數是

ESP連結小米手機WiFi熱點測試

20181021w ESP連結小米WiFi熱點測試 print(‘Setting up WIFI…’) wifi.setmode(wifi.STATION) wifi.sta.config(‘jpf’, ‘12345678’) wifi.sta.connect() tmr.a

關於tensorflow中Dataset圖片的批量讀取以及維度的操作

三維的讀取圖片(w, h, c): import tensorflow as tf import glob import os def _parse_function(filename): # print(filename) image_string = tf.re