最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android獲取wifi列表的方法

 更新時(shí)間:2021年10月19日 11:04:51   作者:習(xí)作  
這篇文章主要為大家詳細(xì)介紹了Android獲取wifi列表的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了Android獲取wifi列表的具體代碼,供大家參考,具體內(nèi)容如下

接著上篇的獲取藍(lán)牙列表,這次我們來獲取android設(shè)備的wifi列表,話不多少直接上代碼!

1.首先我們先獲取wifi權(quán)限

<!-- 以下是使用wifi訪問網(wǎng)絡(luò)所需的權(quán)限 -->
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />

接下來我們直接來定義wifiUtil

public class WifiUtil {
 
    private Context context;
 
    public WifiUtil(Context context) {
        this.context = context;
    }
 
    // TODO: 2021/9/15 獲取本機(jī)WIFI設(shè)備詳細(xì)信息
    @SuppressLint("MissingPermission")
    public void getDetailsWifiInfo() {
        StringBuffer sInfo = new StringBuffer();
        WifiManager mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
        WifiInfo mWifiInfo = mWifiManager.getConnectionInfo();
        int Ip = mWifiInfo.getIpAddress();
        String strIp = "" + (Ip & 0xFF) + "." + ((Ip >> 8) & 0xFF) + "." + ((Ip >> 16) & 0xFF) + "." + ((Ip >> 24) & 0xFF);
        sInfo.append("\n--BSSID : " + mWifiInfo.getBSSID());
        sInfo.append("\n--SSID : " + mWifiInfo.getSSID());
        sInfo.append("\n--nIpAddress : " + strIp);
        sInfo.append("\n--MacAddress : " + mWifiInfo.getMacAddress());
        sInfo.append("\n--NetworkId : " + mWifiInfo.getNetworkId());
        sInfo.append("\n--LinkSpeed : " + mWifiInfo.getLinkSpeed() + "Mbps");
        sInfo.append("\n--Rssi : " + mWifiInfo.getRssi());
        sInfo.append("\n--SupplicantState : " + mWifiInfo.getSupplicantState()+mWifiInfo);
        sInfo.append("\n\n\n\n");
        Log.d("getDetailsWifiInfo", sInfo.toString());
    }
 
    // TODO: 2021/9/15 獲取附近wifi信號(hào)
    public List<String> getAroundWifiDeviceInfo() {
        StringBuffer sInfo = new StringBuffer();
        WifiManager mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
        WifiInfo mWifiInfo = mWifiManager.getConnectionInfo();
        List<ScanResult> scanResults = mWifiManager.getScanResults();//搜索到的設(shè)備列表
        List<ScanResult> newScanResultList = new ArrayList<>();
        for (ScanResult scanResult : scanResults) {
           int position = getItemPosition(newScanResultList,scanResult);
           if (position != -1){
               if (newScanResultList.get(position).level < scanResult.level){
                   newScanResultList.remove(position);
                   newScanResultList.add(position,scanResult);
               }
           }else {
               newScanResultList.add(scanResult);
           }
        }
        List<String> stringList = new ArrayList<>();
        for (int i = 0; i <newScanResultList.size() ; i++) {
            StringBuilder stringBuilder = new StringBuilder();
            stringBuilder.append("設(shè)備名(SSID) ->" + newScanResultList.get(i).SSID + "\n");
            stringBuilder.append("信號(hào)強(qiáng)度 ->" + newScanResultList.get(i).level + "\n");
            stringBuilder.append("BSSID ->" + newScanResultList.get(i).BSSID + "\n");
            stringBuilder.append("level ->" + newScanResultList.get(i).level + "\n");
            stringBuilder.append("采集時(shí)間戳 ->" +System.currentTimeMillis() + "\n");
            stringBuilder.append("rssi ->" + (mWifiInfo != null && (mWifiInfo.getSSID().replace("\"", "")).equals(newScanResultList.get(i).SSID) ? mWifiInfo.getRssi() : null) + "\n");
            //是否為連接信號(hào)(1連接,默認(rèn)為null)
            stringBuilder.append("是否為連接信號(hào) ->" + (mWifiInfo != null && (mWifiInfo.getSSID().replace("\"", "")).equals(newScanResultList.get(i).SSID) ? 1: null) + "\n");
            stringBuilder.append("信道 - >" +getCurrentChannel(mWifiManager) + "\n");
            //1 為2.4g 2 為5g
            stringBuilder.append("頻段 ->" + is24GOr5GHz(newScanResultList.get(i).frequency));
            stringList.add(stringBuilder.toString());
        }
        Log.d("getAroundWifiDeviceInfo", sInfo.toString());
        return stringList;
    }
 
 
    public static String is24GOr5GHz(int freq) {
        if (freq > 2400 && freq < 2500){
            return "1";
        }else if (freq > 4900 && freq < 5900){
            return "2";
        }else {
            return "無法判斷";
        }
    }
 
    /**
     * 返回item在list中的坐標(biāo)
     */
    private int getItemPosition(List<ScanResult>list, ScanResult item) {
        for (int i = 0; i < list.size(); i++) {
            if (item.SSID.equals(list.get(i).SSID)) {
                return i;
            }
        }
        return -1;
    }
 
    public static int getCurrentChannel(WifiManager wifiManager) {
        WifiInfo wifiInfo = wifiManager.getConnectionInfo();// 當(dāng)前wifi連接信息
        List<ScanResult> scanResults = wifiManager.getScanResults();
        for (ScanResult result : scanResults) {
            if (result.BSSID.equalsIgnoreCase(wifiInfo.getBSSID())
                    && result.SSID.equalsIgnoreCase(wifiInfo.getSSID()
                    .substring(1, wifiInfo.getSSID().length() - 1))) {
                return getChannelByFrequency(result.frequency);
            }
        }
        return -1;
    }
 
    /**
     * 根據(jù)頻率獲得信道
     *
     * @param frequency
     * @return
     */
    public static int getChannelByFrequency(int frequency) {
        int channel = -1;
        switch (frequency) {
            case 2412:
                channel = 1;
                break;
            case 2417:
                channel = 2;
                break;
            case 2422:
                channel = 3;
                break;
            case 2427:
                channel = 4;
                break;
            case 2432:
                channel = 5;
                break;
            case 2437:
                channel = 6;
                break;
            case 2442:
                channel = 7;
                break;
            case 2447:
                channel = 8;
                break;
            case 2452:
                channel = 9;
                break;
            case 2457:
                channel = 10;
                break;
            case 2462:
                channel = 11;
                break;
            case 2467:
                channel = 12;
                break;
            case 2472:
                channel = 13;
                break;
            case 2484:
                channel = 14;
                break;
            case 5745:
                channel = 149;
                break;
            case 5765:
                channel = 153;
                break;
            case 5785:
                channel = 157;
                break;
            case 5805:
                channel = 161;
                break;
            case 5825:
                channel = 165;
                break;
        }
        return channel;
    }
}

記得獲取wifi的過程中要去掉重復(fù)的信號(hào)哈,去重代碼

for (ScanResult scanResult : scanResults) {
           int position = getItemPosition(newScanResultList,scanResult);
           if (position != -1){
               if (newScanResultList.get(position).level < scanResult.level){
                   newScanResultList.remove(position);
                   newScanResultList.add(position,scanResult);
               }
           }else {
               newScanResultList.add(scanResult);
           }
        }

2.在需要獲取列表的地方設(shè)置數(shù)據(jù),記得動(dòng)態(tài)獲取權(quán)限哈

// TODO: 2021/9/18  設(shè)置wifi管理器并動(dòng)態(tài)獲取手機(jī)權(quán)限
    @SuppressLint({"CheckResult","NotifyDataSetChanged"})
    private void setWifiManager() {
        RxPermissions rxPermissions = new RxPermissions(this);
        rxPermissions.requestEach(Manifest.permission.ACCESS_FINE_LOCATION)
                .subscribe(permission -> {
                    if (permission.name.equalsIgnoreCase(Manifest.permission.ACCESS_FINE_LOCATION)) {
                        wifiUtil = new WifiUtil(this);
                        wifiListAdapter.getDatas().clear();
                        wifiList.clear();
                        wifiList.add(getString(R.string.wifi_list));
                        wifiList.addAll(wifiUtil.getAroundWifiDeviceInfo());
                        for (int i = 0; i < wifiList.size(); i++) {
                            typeBeanList.add(new TypeBean(true, wifiList.get(i)));
                        }
                        wifiListAdapter.notifyDataSetChanged();
                    }
                });
    }

3.展示結(jié)果

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Android 安全加密:Https編程詳解

    Android 安全加密:Https編程詳解

    本文主要介紹Android安全加密Https編程的知識(shí),這里整理了詳細(xì)的資料及說明解決方案和驗(yàn)證,有興趣的小伙伴可以參考下
    2016-09-09
  • 詳解Android壁紙服務(wù)的啟動(dòng)過程

    詳解Android壁紙服務(wù)的啟動(dòng)過程

    你有設(shè)置過手機(jī)的壁紙嗎,你知道壁紙是什么樣的程序它是怎么在后臺(tái)運(yùn)行的嗎?這篇文章主要介紹了詳解Android系統(tǒng)壁紙服務(wù)的啟動(dòng)過程
    2021-08-08
  • Android之RecyclerView輕松實(shí)現(xiàn)下拉刷新和加載更多示例

    Android之RecyclerView輕松實(shí)現(xiàn)下拉刷新和加載更多示例

    本篇文章主要介紹了Android之RecyclerView輕松實(shí)現(xiàn)下拉刷新和加載更多示例,非常具有實(shí)用價(jià)值,需要的朋友可以參考下。
    2017-02-02
  • android獲取及監(jiān)聽手機(jī)網(wǎng)絡(luò)狀態(tài)

    android獲取及監(jiān)聽手機(jī)網(wǎng)絡(luò)狀態(tài)

    大家好,本篇文章主要講的是android獲取及監(jiān)聽手機(jī)網(wǎng)絡(luò)狀態(tài),感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2022-01-01
  • Android Studio安裝配置方法圖文詳細(xì)教程

    Android Studio安裝配置方法圖文詳細(xì)教程

    這篇文章主要為大家介紹了Android Studio下載和配置圖文詳細(xì)教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • Android自定義View實(shí)現(xiàn)垂直時(shí)間軸布局

    Android自定義View實(shí)現(xiàn)垂直時(shí)間軸布局

    這篇文章主要為大家詳細(xì)介紹了Android自定義View實(shí)現(xiàn)垂直時(shí)間軸布局的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • Android 數(shù)據(jù)存儲(chǔ)方式有哪幾種

    Android 數(shù)據(jù)存儲(chǔ)方式有哪幾種

    android為數(shù)據(jù)存儲(chǔ)提供了五種方式,有SharedPreferences、文件存儲(chǔ)、SQLite數(shù)據(jù)庫、ContentProvider、網(wǎng)絡(luò)存儲(chǔ),對android數(shù)據(jù)存儲(chǔ)方式感興趣的朋友可以通過本文學(xué)習(xí)一下
    2015-11-11
  • Android實(shí)現(xiàn)文件的分割和組裝

    Android實(shí)現(xiàn)文件的分割和組裝

    這篇文章主要介紹了Android實(shí)現(xiàn)文件的分割和組裝,針對UDP大數(shù)據(jù)包的分割傳輸與組裝有著非常實(shí)用的價(jià)值,需要的朋友可以參考下
    2014-09-09
  • android將搜索引擎設(shè)置為中國雅虎無法搜索問題解決方法

    android將搜索引擎設(shè)置為中國雅虎無法搜索問題解決方法

    android 進(jìn)入搜索,將搜索引擎設(shè)置為中國雅虎,無法搜索到相關(guān)網(wǎng)絡(luò)結(jié)果,該問題是由于yahoo的搜索接口改變導(dǎo)致,具體解決方法如下,感興趣的朋友可以參考下哈
    2013-06-06
  • Android?Service完整實(shí)現(xiàn)流程分析

    Android?Service完整實(shí)現(xiàn)流程分析

    Android的服務(wù)是開發(fā)Android應(yīng)用程序的重要組成部分。不同于活動(dòng)Activity,服務(wù)是在后臺(tái)運(yùn)行,服務(wù)沒有接口,生命周期也與活動(dòng)Activity非常不同。通過使用服務(wù)我們可以實(shí)現(xiàn)一些后臺(tái)操作,比如想從遠(yuǎn)程服務(wù)器加載一個(gè)網(wǎng)頁等,下面來看看詳細(xì)內(nèi)容,需要的朋友可以參考下
    2023-01-01

最新評論

湘阴县| 稻城县| 广饶县| 浪卡子县| 克什克腾旗| 林甸县| 白河县| 遂川县| 万荣县| 精河县| 淮安市| 梁平县| 兰坪| 于都县| 武城县| 永康市| 叶城县| 台安县| 张家港市| 即墨市| 郸城县| 高安市| 榆树市| 留坝县| 景洪市| 大关县| 阳春市| 安庆市| 比如县| 玉山县| 建平县| 西充县| 孝义市| 铜山县| 凤庆县| 页游| 潮州市| 高雄县| 沁水县| 株洲市| 布拖县|