Android 判断wifi是2.4G还是5G

转载自:https://blog.csdn.net/QQxiaoqiang1573/article/details/54694205

1.首先我们创建一个wifi工具类WifiUtil,代码如下:

   private WifiManager mWifiManager;
    private static WifiUtil mInstance;

    private WifiUtil(Context context) {
        mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
    }

    public static WifiUtil getInstance(Context context) {
        if (mInstance == null) {
            synchronized (WifiUtil.class) {
                if (mInstance == null) {
                    mInstance = new WifiUtil(context.getApplicationContext());
                }
            }
        }
        return mInstance;
    }

    /***
     * 打开wifi
     */
    public void openWifi(){
        if(!mWifiManager.isWifiEnabled()){
            mWifiManager.setWifiEnabled(true);
        }
    }

    /**
     * 关闭wifi
     */
    public void closeWifi(){
        if(mWifiManager.isWifiEnabled()){
            mWifiManager.setWifiEnabled(false);
        }
    }

    /**
     * 获取wifi扫描结果
     */
    public List<ScanResult> getWifiScanResult(){
        List<ScanResult> mScanResultList = new ArrayList<>();
        List<ScanResult> scanResultList =  mWifiManager.getScanResults();
        if(scanResultList != null && scanResultList.size() > 0){
            for (int i = 0; i < scanResultList.size(); i++) {
                ScanResult scanResult = scanResultList.get(i);
                if(scanResult != null && !TextUtils.isEmpty(scanResult.SSID)){
                    mScanResultList.add(scanResult);
                }else {
                    continue;
                }
            }
        }
        return mScanResultList;

    }

    /**
     * 获取wifi等级,总共分为四级
     * @param rssi
     * @return
     */
    public int getWifiSignal(int rssi){
        if(rssi == Integer.MAX_VALUE){
            return -1;
        }
        return mWifiManager.calculateSignalLevel(rssi,4);
    }

    /**
     * 判断是否2.4Gwifi
     * @param frequency
     * @return
     */
    public boolean is24GHzWifi(int frequency){
        return frequency > 2400 && frequency < 2500;
    }

    /**
     * 判断是否5Gwifi
     * @param frequency
     * @return
     */
    public boolean is5GHzWifi(int frequency) {
        return frequency > 4900 && frequency < 5900;
    }

3、创建一个布局文件,主要是三个按钮,分别是开启wifi,关闭wifi,扫描wifi,和一个listview用于显示wifi列表

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.booyue.jnitest111.activities.ScanWifiActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <Button
            android:id="@+id/open_wifi"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="打开wifi"
            android:textSize="@dimen/size_18" />

        <Button
            android:id="@+id/close_wifi"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="关闭wifi"
            android:textSize="@dimen/size_18" />

        <Button
            android:id="@+id/get_wifi_info"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="获取wifi信息"
            android:textSize="@dimen/size_18" />


    </LinearLayout>

    <ListView
        android:id="@+id/listview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:listitem="@layout/activity_scan_wifi_list_item">

    </ListView>

</LinearLayout>
4、创建activity
public class ScanWifiActivity extends AppCompatActivity {
    public static final String TAG = "ScanWifiActivity";

    private WifiUtil wifiUtil;
    private List<ScanResult> scanResultList;
    private ListView listView;
    private ScanResultAdapter scanResultAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_scan_wifi);
        Button openWifi = (Button) findViewById(R.id.open_wifi);
        Button closeWifi = (Button) findViewById(R.id.close_wifi);
        Button scanWifi = (Button) findViewById(R.id.get_wifi_info);
        listView = (ListView) findViewById(R.id.listview);
        wifiUtil = WifiUtil.getInstance(this);
        String[] requestPermission = new String[]{//由于我的targetSDK是7.0,所以需要动态申请权限
                Manifest.permission.ACCESS_WIFI_STATE,
                Manifest.permission.ACCESS_WIFI_STATE,
                Manifest.permission.ACCESS_COARSE_LOCATION};
        List<String> needRequest = new ArrayList<>();
        for (int i = 0; i < requestPermission.length; i++) {
            if (ContextCompat.checkSelfPermission(this, requestPermission[i]) == PackageManager.PERMISSION_GRANTED) {
            } else {
                needRequest.add(requestPermission[i]);
            }
        }
        if (needRequest != null && needRequest.size() > 0) {
            ActivityCompat.requestPermissions(this, needRequest.toArray(new String[needRequest.size()]), 0);
        }

        openWifi.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                wifiUtil.openWifi();

            }
        });
        closeWifi.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                wifiUtil.closeWifi();
            }
        });
        scanWifi.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                scanResultList = wifiUtil.getWifiScanResult();
                if (scanResultAdapter != null) {
                    scanResultAdapter.notifyDataSetChanged();
                }
            }
        });
        initListView();

    }

    private void initListView() {
        scanResultList = new ArrayList<>();
        scanResultAdapter = new ScanResultAdapter();
        listView.setAdapter(scanResultAdapter);

    }

    class ScanResultAdapter extends BaseAdapter {

        @Override
        public int getCount() {

            return scanResultList.size();
        }

        @Override
        public Object getItem(int position) {
            return scanResultList.get(position);
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            ViewHolder viewHolder;
            if (convertView == null) {
                convertView = ScanWifiActivity.this.getLayoutInflater().inflate(R.layout.activity_scan_wifi_list_item, parent, false);
                viewHolder = new ViewHolder(convertView);
                convertView.setTag(viewHolder);
            } else {
                viewHolder = (ViewHolder) convertView.getTag();
            }
            if (scanResultList != null && scanResultList.size() > 0) {
                ScanResult scanResult = scanResultList.get(position);
                if (scanResult == null) return convertView;
                int level = scanResultList.get(position).level;
                viewHolder.ivSignal.setImageResource(R.drawable.wifi_signal);
                viewHolder.ivSignal.setImageLevel(wifiUtil.getWifiSignal(level));
                viewHolder.tvWifiName.setText(scanResultList.get(position).SSID);
                int frequency = scanResultList.get(position).frequency;
                boolean is5G = wifiUtil.is5GHzWifi(frequency);
                boolean is24G = wifiUtil.is24GHzWifi(frequency);
                if (is5G) {
                    viewHolder.tvWifiFrequency.setText("5G");
                } else if (is24G) {
                    viewHolder.tvWifiFrequency.setText("2.4G");
                } else {

                    viewHolder.tvWifiFrequency.setText("");
                }
                Log.d(TAG, "SSID = " + scanResult.SSID + "--LEVEL = " + level + "--FREQUENCY  = " + scanResult.frequency);
            }
            return convertView;
        }

        class ViewHolder {
            public ImageView ivSignal;
            public TextView tvWifiName;
            public TextView tvWifiFrequency;

            public ViewHolder(View convertView) {
                this.ivSignal = convertView.findViewById(R.id.iv_wifi_signal);
                this.tvWifiName = convertView.findViewById(R.id.tv_wifi_name);
                this.tvWifiFrequency = convertView.findViewById(R.id.tv_wifi_hz);
            }
        }
    }
   //动态申请权限的回调
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        for (int i = 0; i < grantResults.length; i++) {
            if (grantResults[i] != PackageManager.PERMISSION_GRANTED) {
                return;
            }
        }
        Log.d(TAG, "onRequestPermissionsResult: OK");
//        wifiUtil.openWifi();
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    }

猜你喜欢

转载自blog.csdn.net/a1527238987/article/details/80197474
今日推荐