Android wifi开发包含列表获取点击连接wifi

注意:编译sdk版本

minSdk 21

targetSdk 28

亲自测试,在Android10上正常使用

  1. 包依赖

    implementation 'com.thanosfisherman.elvis:elvis:3.0'
    api 'com.thanosfisherman.wifiutils:wifiutils:1.6.2'

2.activity界面

package com.xiaoya.bluetooth.wifi.pages;

import android.Manifest;
import android.app.Activity;
import android.content.Context;
import android.content.pm.PackageManager;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.os.Looper;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.widget.CompoundButton;
import android.widget.Switch;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import com.hb.dialog.myDialog.MyAlertInputDialog;
import com.thanosfisherman.wifiutils.WifiUtils;
import com.thanosfisherman.wifiutils.wifiScan.ScanResultsListener;
import com.xiaoya.bluetooth.R;
import com.xiaoya.bluetooth.wifi.adapter.WifiListAdapter;
import com.xiaoya.bluetooth.wifi.bean.WifiBean;
import com.xiaoya.bluetooth.wifi.deal.ConnectionManager;
import com.xiaoya.bluetooth.wifi.deal.LoginDialogUtil;
import com.xiaoya.bluetooth.wifi.utils.HandlerUtils;


import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class WiFiActivity extends Activity implements HandlerUtils.OnReceiveMessageListener {

    //url:https://github.com/ThanosFisherman/WifiUtils.git
    // 权限请求码
    private static final int PERMISSION_REQUEST_CODE = 0;
    // 两个权限需要动态申请
    private static final String[] NEEDED_PERMISSIONS = new String[]{
            Manifest.permission.ACCESS_COARSE_LOCATION,
            Manifest.permission.ACCESS_FINE_LOCATION
    };

    private HandlerUtils.HandlerHolder handlerUtils;

    //view
    private RecyclerView recycleview;
    private Switch switchBt;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.oklayout);

        if (ContextCompat.checkSelfPermission(this,
                Manifest.permission.ACCESS_FINE_LOCATION)
                != PackageManager.PERMISSION_GRANTED) {

            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 555);
            return;

        }


        // SSID 扫描wifi
        // SSID 扫描wifi
        // new ConnectionManager(WiFiActivity.this).scanWithWAP();

        // 新方法连接wifi
        // new ConnectionManager(WiFiActivity.this).connectWifiWithWAP(wifiName3, wifiPassword3);

        // 取消正在连接的wifi
        // new ConnectionManager(WiFiActivity.this).cancelConnectWithWAP(wifiName3, wifiPassword3);

        // 这个bssid是扫描扫出来的,跟ssid对应 ,ssid其实就是wifi名称
        // new ConnectionManager(WiFiActivity.this).wpsConnectWithWAP("54:a7:03:dd:9e:96", wifiPassword3);

        // 断开连接wifi
        // new ConnectionManager(WiFiActivity.this).disConnectWithWAP();
        // 不保存且断开链接
        // new ConnectionManager(WiFiActivity.this).disConnectDeleteWithWAP(wifiName3);

        init();

    }

    /**
     * 判断权限
     * 是否通过,
     * 如果通过
     * 就初始化
     */
    private boolean mHasPermission; // 是否通过权限

    private void init() {
        mHasPermission = checkPermission();
        if (!mHasPermission) {
            // 未获取权限,申请权限
            requestPermission();
            Toast.makeText(WiFiActivity.this, "未获取权限,申请权限", Toast.LENGTH_SHORT).show();
        } else if (mHasPermission) {
            // 已经获取权限
            Toast.makeText(WiFiActivity.this, "已经获取权限", Toast.LENGTH_SHORT).show();
        } else {
            Toast.makeText(WiFiActivity.this, "WIFI处于关闭状态", Toast.LENGTH_SHORT).show();
        }
    }

    /**
     * 申请
     * 权限
     */
    private void requestPermission() {
        ActivityCompat.requestPermissions(this, NEEDED_PERMISSIONS, PERMISSION_REQUEST_CODE);
    }

    /**
     * @return 检查
     * 是否
     * 已经
     * 授予权限
     */
    private boolean checkPermission() {
        for (String permission : NEEDED_PERMISSIONS) {
            if (ActivityCompat.checkSelfPermission(this, permission)
                    != PackageManager.PERMISSION_GRANTED) {
                return false;
            }
        }

        return true;
    }

    @Override
    protected void onResume() {
        super.onResume();

        initView();
    }

    /**
     * 初始化
     * view
     */
    private List<WifiBean> mList = new ArrayList<>();
    private HandlerUtils.HandlerHolder myHandler;
    private static final int MSG_WIFI_TAG = 0x11111;//连接WiFi成功
    private static final int MSG_WIFI_TWO = 0x11112;//消息标记

    private WifiListAdapter wifiListAdapter;
    private WifiManager wifiMgr;//wifi管理

    private void initView() {
        handlerUtils = new HandlerUtils.HandlerHolder(this);

        recycleview = findViewById(R.id.recycleview);
        switchBt = findViewById(R.id.switch_bt);

        LinearLayoutManager managerVertical = new LinearLayoutManager(WiFiActivity.this);
        managerVertical.setOrientation(LinearLayoutManager.VERTICAL);

        recycleview.setLayoutManager(managerVertical);
        recycleview.setHasFixedSize(true);


        //选择
        switchBt.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                Log.d("TAG", "=====isChecked======" + isChecked);
                Toast.makeText(WiFiActivity.this, "开始扫描0000", Toast.LENGTH_LONG).show();
                if (isChecked) {//打开WiFi
                    LoginDialogUtil.getInstance().showLoadingDialog(WiFiActivity.this, "Wifi扫描中...");

                    Toast.makeText(WiFiActivity.this, "开始扫描", Toast.LENGTH_LONG).show();
                    switchBt.setSwitchPadding(2);
                    openWifi();

                } else {  //关闭wifi
                    Toast.makeText(WiFiActivity.this, "关闭扫描", Toast.LENGTH_LONG).show();
                    switchBt.setSwitchPadding(1);
                    new ConnectionManager(WiFiActivity.this).closeWithWAP();

                    mList.clear();
                    wifiListAdapter.notifyDataSetChanged();
                }
            }
        });

        wifiListAdapter = new WifiListAdapter(this, mList);

        recycleview.setAdapter(wifiListAdapter);

        wifiMgr = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
        //接口回调
        wifiListAdapter.setMyOnItemClickListener(new WifiListAdapter.OnItemClickListener() {
            @Override
            public void OnItemClick(View view, int position) {
                //连接wifi
                Log.d("TAG", "====position=====" + mList.get(position).getWifiName());

                final MyAlertInputDialog myAlertInputDialog = new MyAlertInputDialog(WiFiActivity.this).builder()
                        .setTitle("请输入wifi" + mList.get(position).getWifiName() + "密码")
                        .setEditText("");
                myAlertInputDialog.setPositiveButton("确认", new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        LoginDialogUtil.getInstance().showLoadingDialog(WiFiActivity.this, "Wifi连接中...");//开启加载动画
                        Log.d("TAG", "===请输入wifi===" +
                                mList.get(position).getWifiName() +
                                "======" + myAlertInputDialog
                                .getContentEditText()
                                .getText()
                                .toString().trim());

                        wifiUserName = mList.get(position).getWifiName().trim();
                        wifiPassWord = myAlertInputDialog
                                .getContentEditText()
                                .getText()
                                .toString().trim();


                        handlerUtils.sendEmptyMessageDelayed(MSG_WIFI_TAG, 100);

                        myAlertInputDialog.dismiss();


                    }
                }).setNegativeButton("取消", new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {

                        myAlertInputDialog.dismiss();
                    }
                });
                myAlertInputDialog.show();

            }

            @Override
            public void OnItemLonClick(int position) {

            }
        });


    }

    /**
     * 打开
     * 网络
     */
    private void openWifi() {
        new ConnectionManager(WiFiActivity.this).openWithWAP();

        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    Looper.prepare();
                    Thread.sleep(1000);
                    scanWithWAP();


                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

            }
        }).start();
    }


    /**
     * 扫描
     * wifi
     */
    public void scanWithWAP() {

        WifiUtils.withContext(this).scanWifi(new ScanResultsListener() {
            @Override
            public void onScanResults(@NonNull List<ScanResult> scanResults) {
                mList.clear();

                for (int i = 0; i < scanResults.size(); i++) {
                    //SSID:wifi名字
                    //加密方式:capabilities
                    //信号强度:level
                    if (!scanResults.get(i).SSID.isEmpty() && scanResults.get(i).SSID != "") {
                        WifiBean wifiBean = new WifiBean();

                        wifiBean.setWifiName(scanResults.get(i).SSID);
                        wifiBean.setState("未连接");
                        wifiBean.setBsssiD(scanResults.get(i).BSSID);
                        wifiBean.setCapabilities(scanResults.get(i).capabilities);
                        wifiBean.setLevel(scanResults.get(i).level);
                        mList.add(wifiBean);

                    }

                    Log.d("TAG", "====扫码结果====" +
                            scanResults.get(i).SSID + "====" +
                            scanResults.get(i).BSSID + "===" +
                            scanResults.get(i).level + "===" +
                            scanResults.get(i).capabilities + "==="
                    );

                }

                Set<WifiBean> userSet = new HashSet<>(mList);
                mList.clear();
                List<WifiBean> mist = new ArrayList<>(userSet);
                Log.d("TAG", "======1111=====" + mist.size());

                mList.addAll(mist);
                Log.d("TAG", "======2222=====" + mList.size());


                Collections.sort(mList);

                handlerUtils.sendEmptyMessage(MSG_WIFI_TWO);

            }
        }).start();

    }

    @Override
    protected void onDestroy() {
        super.onDestroy();

    }

    @Override
    public void handlerMessage(Message msg) {
        switch (msg.what) {
            case MSG_WIFI_TAG:

                if (WifiUtils.withContext(WiFiActivity.this).isWifiConnected()) {
                    Toast.makeText(WiFiActivity.this, "wifi连接成功", Toast.LENGTH_LONG).show();
                    LoginDialogUtil.getInstance().closeLoadingDialog();//关闭对话框
                } else {

                    handlerUtils.sendEmptyMessageDelayed(MSG_WIFI_TAG, 3000);
                    connectWiFi(wifiUserName, wifiPassWord);

                }

                break;
            case MSG_WIFI_TWO:
                Log.d("TAG", "======刷新数=====" + mList.size());
                wifiListAdapter.setVerticalDataList(mList);
                LoginDialogUtil.getInstance().closeLoadingDialog();//关闭动画

                break;
            default:
                break;
        }
    }

    /**
     * 连接
     * WiFi
     */
    private String wifiUserName = "";
    private String wifiPassWord = "";

    private void connectWiFi(String name, String passWord) {
        WifiConfiguration wifiCong = new WifiConfiguration();
        wifiCong.SSID = "\"" + name.trim() + "\"";//\"转义字符,代表"
        wifiCong.preSharedKey = "\"" + passWord.trim() + "\"";//WPA-PSK密码

        wifiCong.hiddenSSID = false;
        wifiCong.status = WifiConfiguration.Status.ENABLED;
        int resstate = wifiMgr.addNetwork(wifiCong);//107将配置好的特定WIFI密码信息添加,添加完成后默认是不激活状态,成功返回ID,否则为-1
        Log.d("TAG", "====WIFI密码信息添加状态=====" + resstate);
        if (resstate == -1) {
            Log.d("TAG", "===再添加一次===WIFI密码信息添加状态===" + resstate);
            wifiMgr.addNetwork(wifiCong);

        } else {

            //wifi连接成功
        }
    }
}
  1. wifi管理工具

package com.xiaoya.bluetooth.wifi.deal;

import android.content.Context;
import android.net.wifi.ScanResult;
import android.util.Log;
import android.widget.Toast;

import androidx.annotation.NonNull;

import com.thanosfisherman.wifiutils.WifiConnectorBuilder;
import com.thanosfisherman.wifiutils.WifiUtils;
import com.thanosfisherman.wifiutils.wifiConnect.ConnectionErrorCode;
import com.thanosfisherman.wifiutils.wifiConnect.ConnectionSuccessListener;
import com.thanosfisherman.wifiutils.wifiDisconnect.DisconnectionErrorCode;
import com.thanosfisherman.wifiutils.wifiDisconnect.DisconnectionSuccessListener;
import com.thanosfisherman.wifiutils.wifiRemove.RemoveErrorCode;
import com.thanosfisherman.wifiutils.wifiRemove.RemoveSuccessListener;
import com.thanosfisherman.wifiutils.wifiScan.ScanResultsListener;
import com.thanosfisherman.wifiutils.wifiWps.ConnectionWpsListener;

import java.util.List;

public class ConnectionManager {

    private Context context;

    public ConnectionManager(Context context) {
        this.context = context;
    }

    //打开wifi
    public void openWithWAP() {
        WifiUtils.withContext(context).enableWifi(this::checkResult);
    }

    //关闭wifi
    public void closeWithWAP() {
        WifiUtils.withContext(context).disableWifi();
    }

    //扫描wifi
    public void scanWithWAP() {
        WifiUtils.withContext(context).scanWifi(new ScanResultsListener() {
            @Override
            public void onScanResults(@NonNull List<ScanResult> scanResults) {

                for (int i = 0; i < scanResults.size(); i++) {
                    //SSID:wifi名字
                    //加密方式:capabilities
                    //信号强度:level

                    Log.d("TAG", "====扫码结果====" +
                            scanResults.get(i).SSID + "====" +
                            scanResults.get(i).BSSID + "===" +
                            scanResults.get(i).level + "===" +
                            scanResults.get(i).capabilities);

                }

            }
        }).start();
    }

    //连接wifi
    public void connectWifiWithWAP(String name, String password) {
        WifiUtils.withContext(context)
                .connectWith(name, password)
                .setTimeout(20000)
                .onConnectionResult(new ConnectionSuccessListener() {
                    @Override
                    public void success() {
                        Log.d("TAG","========连接wifi成功==SUCCESS!======");
                        Toast.makeText(context, "===连接wifi成功==SUCCESS!", Toast.LENGTH_SHORT).show();
                    }

                    @Override
                    public void failed(@NonNull ConnectionErrorCode errorCode) {
                        Log.d("TAG","========连接wifi失败==FAIL!======"+errorCode.toString());
                        Toast.makeText(context, "===连接wifi失败==EPIC FAIL!" + errorCode.toString(), Toast.LENGTH_LONG).show();
                    }
                })
                .start();
    }

    //取消正在连接的wifi
    public void cancelConnectWithWAP(String name, String password) {
        WifiConnectorBuilder.WifiUtilsBuilder builder = WifiUtils.withContext(context);
        builder.connectWith(name, password)
                .onConnectionResult(new ConnectionSuccessListener() {
                    @Override
                    public void success() {
                        Toast.makeText(context, "取消 SUCCESS!", Toast.LENGTH_SHORT).show();
                    }

                    @Override
                    public void failed(@NonNull ConnectionErrorCode errorCode) {
                        Toast.makeText(context, "EPIC FAIL!" + errorCode.toString(), Toast.LENGTH_SHORT).show();
                    }
                })
                .start();
        builder.cancelAutoConnect();
    }

    //wps连接wifi
    public void wpsConnectWithWAP(String name, String password) {
        WifiUtils.withContext(context)
                .connectWithWps(name, password)
                .onConnectionWpsResult(new ConnectionWpsListener() {
                    @Override
                    public void isSuccessful(boolean isSuccess) {
                        Toast.makeText(context, "" + isSuccess, Toast.LENGTH_SHORT).show();

                    }
                })
                .start();
    }


    //断开wifi
    public void disConnectWithWAP() {
        WifiUtils.withContext(context)
                .disconnect(new DisconnectionSuccessListener() {
                    @Override
                    public void success() {
                        Toast.makeText(context, "Disconnect success!", Toast.LENGTH_SHORT).show();
                    }

                    @Override
                    public void failed(@NonNull DisconnectionErrorCode errorCode) {
                        Toast.makeText(context, "Failed to disconnect: " + errorCode.toString(), Toast.LENGTH_SHORT).show();
                    }
                });
    }


    //断开连接并删除保存的网络配置 wifi
    public void disConnectDeleteWithWAP(String nameSsid) {
        WifiUtils.withContext(context)
                .remove(nameSsid, new RemoveSuccessListener() {
                    @Override
                    public void success() {
                        Toast.makeText(context, "Remove success!", Toast.LENGTH_SHORT).show();
                    }

                    @Override
                    public void failed(@NonNull RemoveErrorCode errorCode) {
                        Toast.makeText(context, "Failed to disconnect and remove: $errorCode", Toast.LENGTH_SHORT).show();
                    }
                });
    }


    private void getScanResults(@NonNull final List<ScanResult> results) {
        if (results.isEmpty()) {
            Log.e("TAG", "SCAN RESULTS IT'S EMPTY");
            return;
        }
        Log.e("TAG", "GOT SCAN RESULTS " + results);
    }


    private void checkResult(boolean isSuccess) {
        if (isSuccess)
            Toast.makeText(context, "WIFI已经打开", Toast.LENGTH_SHORT).show();
        else
            Toast.makeText(context, "无法打开wifi", Toast.LENGTH_SHORT).show();
    }


}

  1. 效果

详情见代码

资源下载

https://download.csdn.net/download/shi450561200/87368299

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
wifi的操作。 要实现这个Android wifi开发程序,我们需要使用以下几个类: 1. WifiManager:用于管理wifi连接。 2. WifiInfo:用于获取当前连接wifi信息。 3. WifiConfiguration:用于设置wifi连接的配置参数。 4. WifiScan:用于扫描周围的wifi。 下面是一个示例代码,展示如何使用这些类来实现wifi的扫描、连接、断开操作: ``` public class MainActivity extends AppCompatActivity { private WifiManager wifiManager; private WifiScanReceiver wifiScanReceiver; private List<ScanResult> wifiList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE); wifiScanReceiver = new WifiScanReceiver(); registerReceiver(wifiScanReceiver, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)); if(wifiManager.isWifiEnabled()){ wifiManager.startScan(); Log.d("WIFI", "Started Scanning"); }else{ Toast.makeText(getApplicationContext(), "WiFi is disabled.. Please enable it", Toast.LENGTH_LONG).show(); wifiManager.setWifiEnabled(true); } } public void connectToWifi(String ssid, String password){ WifiConfiguration wifiConfig = new WifiConfiguration(); wifiConfig.SSID = String.format("\"%s\"", ssid); wifiConfig.preSharedKey = String.format("\"%s\"", password); WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE); int networkId = wifiManager.addNetwork(wifiConfig); wifiManager.disconnect(); wifiManager.enableNetwork(networkId, true); wifiManager.reconnect(); } public void disconnectFromWifi(){ WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE); wifiManager.disconnect(); } private class WifiScanReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { wifiList = wifiManager.getScanResults(); Log.d("WIFI", "Scan Result: " + wifiList.toString()); } } } ``` 在这个示例代码中,我们首先获取WIFI_SERVICE实例,然后注册了一个WifiScanReceiver来接收wifi扫描的结果。 在onCreate()方法中,我们首先检查wifi是否已经启用。如果已经启用,则调用wifiManager.startScan()方法来启动扫描,并在Logcat中输出“Started Scanning”的消息。 如果wifi未启用,则我们会弹出一条Toast消息来提示用户启用wifi,然后调用wifiManager.setWifiEnabled(true)方法来启用wifi。 接下来,我们定义了connectToWifi()方法和disconnectFromWifi()方法来分别连接和断开wifi。 在connectToWifi()方法中,我们首先创建了一个WifiConfiguration对象,并设置其SSID和preSharedKey属性为连接wifi名称和密码。然后,我们调用wifiManager.addNetwork(wifiConfig)方法来添加一个新的wifi连接配置,并获取新添加的连接的networkId。接着,我们调用wifiManager.disconnect()方法来断开当前连接wifi,并调用wifiManager.enableNetwork(networkId, true)方法来激活新添加的连接配置。最后,我们调用wifiManager.reconnect()方法来连接到新添加的wifi网络。 在disconnectFromWifi()方法中,我们只需要调用wifiManager.disconnect()方法即可断开当前连接wifi。 最后,我们通过定义一个WifiScanReceiver类来接收wifi扫描的结果,并在Logcat中输出扫描结果。当扫描结果更新时,系统会自动调用WifiScanReceiver的onReceive()方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值