Android—WIFI开发流程

本文介绍了Android平台上进行WIFI开发的基本流程,包括添加权限、获取WiFiManager、手动扫描和监听WiFi列表、设置连接、状态监听,以及相关辅助方法如判断5G网络和热点状态。特别提到在Android 6.0后修改其他应用WiFi设置的限制,并探讨了可能的解决方案。
摘要由CSDN通过智能技术生成

1.添加权限

    <!-- 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"/>

2.获取wifi列表

(1) 获取wifiManager

wifiManager = (WifiManager) context.getSystemService(context.WIFI_SERVICE);

(2)注册wifi扫描广播

        myWifiScanReceiver=new MyWifiScanReceiver();
        IntentFilter intentFilter=new IntentFilter();
        intentFilter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
        mContext.registerReceiver(myWifiScanReceiver,intentFilter);

    private class MyWifiScanReceiver extends BroadcastReceiver {

        @Override
        public void onReceive(Context context, Intent intent) {

            ArrayList<ScanResult> list;                   //存放周围wifi热点对象的列表
            list = (ArrayList<ScanResult>) wifiManager.getScanResults();
            ArrayList<ScanResult> list_new = new ArrayList<>();
            for(ScanResult result:list){
                list_new.add(result);
            }
            list_new=sortByLevel(list_new);
            wifiListInter.getWifiList(list_new);

            try {
                mContext.unregisterReceiver(myWifiScanReceiver);
            }catch (Exception e){

            }

        }
    }

此处的wifi列表,是自己手动扫描,然后监听扫描结果来获取的,比较最新的列表,当然,你也可以直接调用WifiManager的getScanResults()方法直接获取上次扫描到的wifi列表信息。


(3)通过wifiManager开启扫描

        wifiManager.startScan();

3.将获取到的wifi列表,按照强度由高到低排序

这里的等级可以根据自己的需求设置等级数

    private ArrayList<ScanResult> sortByLevel(ArrayList<ScanResult> list) {
        Collections.sort(list, new Comparator<ScanResult>() {
            @Override
            public int compare(ScanResult scanResult, ScanResult t1) {
                int i =  wifiManager.calculateSignalLevel(t1.level,4)- wifiManager.calculateSignalLevel(scanResult.level,4);
                return i;
            }
        });
        return list;
    }

4.获取wifi类别
     public static final int WIFICIPHER_NOPASS = 0;
    public static final int WIFICIPHER_WEP = 1;
    public static final int WIFICIPHER_PSK = 2;
    public static final int WIFICIPHER_EAP = 3;
    public static final 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值