Android获取wifi列表的方法

本文实例为大家分享了Android获取wifi列表的具体代码,供大家参考,具体内容如下

接着上篇的获取蓝牙列表,这次我们来获取android设备的wifi列表,话不多少直接上代码!

1.首先我们先获取wifi权限

<!-- 以下是使用wifi访问网络所需的权限 -->
<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 获取本机WIFI设备详细信息
    @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信号
    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();//搜索到的设备列表
        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("设备名(SSID) ->" + newScanResultList.get(i).SSID + "\n");
            stringBuilder.append("信号强度 ->" + newScanResultList.get(i).level + "\n");
            stringBuilder.append("BSSID ->" + newScanResultList.get(i).BSSID + "\n");
            stringBuilder.append("level ->" + newScanResultList.get(i).level + "\n");
            stringBuilder.append("采集时间戳 ->" +System.currentTimeMillis() + "\n");
            stringBuilder.append("rssi ->" + (mWifiInfo != null && (mWifiInfo.getSSID().replace("\"", "")).equals(newScanResultList.get(i).SSID) ? mWifiInfo.getRssi() : null) + "\n");
            //是否为连接信号(1连接,默认为null)
            stringBuilder.append("是否为连接信号 ->" + (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中的坐标
     */
    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();// 当前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;
    }

    /**
     * 根据频率获得信道
     *
     * @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的过程中要去掉重复的信号哈,去重代码

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.在需要获取列表的地方设置数据,记得动态获取权限哈

// TODO: 2021/9/18  设置wifi管理器并动态获取手机权限
    @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.展示结果

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Android获取当前已连接的wifi信号强度的方法

    本文实例讲述了Android获取当前已连接的wifi信号强度的方法,是Android程序开发中非常常见的重要技巧.分享给大家供大家参考之用.具体方法如下: 1.得到当前已连接的wifi信息 WifiManager wifi_service = (WifiManager)getSystemService(WIFI_SERVICE); WifiInfo wifiInfo = wifi_service.getConnectionInfo(); 其中wifiInfo有以下的方法: wifiinfo.ge

  • Android开发实现在Wifi下获取本地IP地址的方法

    本文实例讲述了Android开发实现在Wifi下获取本地IP地址的方法.分享给大家供大家参考,具体如下: 代码核心介绍: WifiManager类提供了对设备Wifi功能的管理,包括Wifi开关的打开和关闭,IP地址获取等等,早期的Android版本甚至支持对于IP的设置.在这里仅介绍其简单的一个小应用--获取IP地址. 首先先添加Uses-Permission:CHANGE_WIFI_STATE,WAKE_LOCK和ACCESS_WIFI_STATE.代码如下(AndroidManifest.

  • 解决Android 6.0获取wifi Mac地址为02:00:00:00:00:00问题

    前言: 之前项目比较旧,手机版本还比较低,还使用eclipse开发.用到了需要获取手机wifi Mac地址.使用了如下代码: // Android 6.0之前的版本可以用的方法(模拟器可以使用) private String getMacAddrOld() { String macString = ""; WifiManager wifimsg = (WifiManager)getSystemService(Context.WIFI_SERVICE); if (wifimsg != n

  • android连接wifi时获取广播地址代码

    复制代码 代码如下: private InetAddress getBroadcastAddress() throws IOException { WifiManager myWifiManager = (WifiManager) getSystemService(WIFI_SERVICE); DhcpInfo myDhcpInfo = myWifiManager.getDhcpInfo(); if (myDhcpInfo == null) { System.out.println("Could

  • Android获取周围WIFI热点服务

    在实际开发中我们会经常需要获取周围WiFi热点,最近做了这个demo,写出来和大家一起分享一下吧.大体思路呢是这样的,首先WifiManger获取WiFi服务,然后将结果储存在ArrayList<ScanResult>中,好了,具体内容大家可以直接看代码: MainActivity.java:  public class MainActivity extends AppCompatActivity { ArrayList<ScanResult> list; //存放周围wifi热点

  • Android获取当前手机网络类型(2g、3g、4g、wifi)以及手机型号、版本号代码

    获取手机型号: android.os.Build.MODEL 获取手机的SDK版本号:android.os.Build.VERSION.SDK 获取手机当前网络类型代码如下:这是一个工具类,大家可以保存下来以后方便使用. package com.iqtogether.qxueyou.support.util; import android.content.Context; import android.net.ConnectivityManager; import android.net.Net

  • Android编程实现获取当前连接wifi名字的方法

    本文实例讲述了Android编程实现获取当前连接wifi名字的方法.分享给大家供大家参考,具体如下: WifiManager wifiMgr = (WifiManager) mActivity.getSystemService(Context.WIFI_SERVICE); int wifiState = wifiMgr.getWifiState(); WifiInfo info = wifiMgr.getConnectionInfo(); String wifiId = info != null

  • Android编程获取Wifi名称(SSID)的方法

    本文实例讲述了Android编程获取Wifi名称(SSID)的方法.分享给大家供大家参考,具体如下: 可以使用WifiManager和WifiInfo来获取当前Wifi连接信息 WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE); WifiInfo wifiInfo = wifiManager.getConnectionInfo(); Log.d("wifiInfo", wifiInfo.toSt

  • Android获取wifi列表的方法

    本文实例为大家分享了Android获取wifi列表的具体代码,供大家参考,具体内容如下 接着上篇的获取蓝牙列表,这次我们来获取android设备的wifi列表,话不多少直接上代码! 1.首先我们先获取wifi权限 <!-- 以下是使用wifi访问网络所需的权限 --> <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /> <uses-permission and

  • android获取ibeacon列表的方法

    android获取ibeacon列表,供大家参考,具体内容如下 最近公司有需要做ibeacon需求. 因为涉及扫码的时间.特意写一个service实现获取列表 可以根据扫描时间扫描出ibeacon列表 包含 uuid,设备名称,单位(米),电量等. 请根据自己的项目进行改造代码. 核心代码如下: /** * * <ibeaon服务> * * @author fulushan * @date 创建时间:2018年4月5日 下午11:34:04 */ public class IbeaconSer

  • Android获取蓝牙设备列表的方法

    最近换了一家公司,主要内容是做关于移动端室内定位的相关sdk,刚进来的时候信心满满,誓要干出一番天地!!!结果进来快一个多月了,根本没轮到我施展拳脚,给我搁置在一旁自己弄自己的.行吧,既然是做室内定位的话那无非就是(gps,蓝牙,wifi等)这些技术来实现嘛,然后我们就可以有本篇的切入点了: android如何获取蓝牙设备了? 我们一步一步来分析,首先蓝牙属于一种短距离的无线通信技术,那作为我们android系统是否对此有过封装了?答案那肯定是有了! BluetoothAdapter andro

  • php简单获取目录列表的方法

    本文实例讲述了php简单获取目录列表的方法.分享给大家供大家参考.具体实现方法如下: <?php function list_directory_content($dir){ if(is_dir($dir)){ if($handle = opendir($dir)){ while(($file = readdir($handle)) !== false){ if($file != '.' && $file != '..' && $file != '.htaccess'

  • PHP模拟登陆163邮箱发邮件及获取通讯录列表的方法

    本文实例讲述了PHP模拟登陆163邮箱发邮件及获取通讯录列表的方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: <?php     header("Content-Type: text/html; charset=UTF-8");     error_reporting(0);     /**      * 登陆      * $user 163用户名      * $pass 密码     **/     function login($user,$pass

  • Android 获取传感器列表整理及简单实例

    Android 获取传感器列表整理及简单实例 Android 4.4 (API等级19)支持以下传感器: TYPE_ACCELEROMETER 加速度传感器,单位是m/s2,测量应用于设备X.Y.Z轴上的加速度 传感器类型值(Sensor Type):1 (0x00000001) TYPE_AMBIENT_TEMPERATURE 温度传感器,单位是℃ 传感器类型值(Sensor Type): 13 (0x0000000d) TYPE_GAME_ROTATION_VECTOR 游戏动作传感器,不收

  • 详解Android获取系统内核版本的方法与实现代码

    Android获取系统内核版本的方法 这里主要实现获取Android Linux 内核的版本号,网上关于这类文章不是很多,这里记录下,希望能帮助到大家, 实现代码: public static String getKernelVersion() { String kernelVersion = ""; InputStream inputStream = null; try { inputStream = new FileInputStream("/proc/version&q

  • Android获取联系人头像的方法

    本文实例讲述了Android获取联系人头像的方法.分享给大家供大家参考,具体如下: public byte[] getPhoto(String people_id) { String photo_id = null; String selection1 = ContactsContract.Contacts._ID + " = " + people_id; Cursor cur1 = getContentResolver().query( ContactsContract.Contac

  • Android 处理空列表的方法(必看篇)

    android中ListView 用来展示数据,如果列表为空的状态,可以通过setEmpty(View)方法设置为空时显示的内容. 布局xml <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android

  • Android获取RecyclerView滑动距离方法详细讲解

    先说能用的究极解决方案,大家着急的直接复制走,以后想了解再过来看 没有header,且所有Item的高度一致 private fun getScrollYDistance(recyclerView: RecyclerView): Int? { kotlin.runCatching { val layoutManager = recyclerView.layoutManager as LinearLayoutManager val position = layoutManager.findFirs

随机推荐