代码实现WIFI自动连接与连接指定WIFI源码

时间:2025-02-08 16:37:57

最近家里老人总是问我如何连接WIFI,和他们电话讲又讲不清楚,于是我想到了写一个,打开自动连接指定WIFI的软件。练练手。

废话不多说,首先布局,简单!

两个文本框一个按钮

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:andro
    xmlns:app="/apk/res-auto"
    xmlns:tools="/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".Shezhi"
    android:orientation="vertical"
    android:background="#b2cbfd"
    android:focusable="true"
    android:focusableInTouchMode="true">
<EditText
    android:hint="请输入wifi名"
    android:layout_marginTop="10dp"
    android:
    android:layout_width="match_parent"
    android:layout_height="50dp" />
    <EditText
        android:hint="请输入wifi密码"
        android:layout_marginTop="10dp"
        android:
        android:layout_width="match_parent"
        android:layout_height="50dp" />
    <Button
        android:textSize="20sp"
        android:text="确定"
        android:
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
</LinearLayout>

 设置连接WIFI名和密码

将用户输入的WIFI名和密码保存到sp中

public class Shezhi extends AppCompatActivity {
        private EditText mingzi;
        private EditText mima;
        private SharedPreferences sharedPreferences;
        private Button button;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        (savedInstanceState);
        setContentView(.activity_shezhi);
        chushihua();
        (new () {
            @Override
            public void onClick(View v) {
                String trim = ().toString().trim();
                String trim1 = ().toString().trim();
                if (!() && !()){
                     edit = ();
                    ("mingzi",trim);
                    ("mima",trim1);
                    ();
                    (getApplicationContext(),"设置成功",Toast.LENGTH_SHORT).show();
                    finish();
                }else {
                    (getApplicationContext(),"不能为空",Toast.LENGTH_SHORT).show();
                }
            }
        });
    }

    private void chushihua() {
        mingzi=(EditText)findViewById();
        mima=(EditText)findViewById();
        button=(Button)findViewById();
        sharedPreferences=getSharedPreferences("wifi",0);
    }
}

WIFI连接工具类

这是一个封装好的类(用于连接WIFI的一系列操作),具体里面注释了

 

public class Wifigongju {
    // 定义WifiManager对象
    private WifiManager mWifiManager;
    // 定义WifiInfo对象
    private WifiInfo mWifiInfo;
    // 扫描出的网络连接列表
    private List<ScanResult> mWifiList;
    // 网络连接列表
    private List<WifiConfiguration> mWifiConfiguration;
    // 定义一个WifiLock
     mWifiLock;


    // 构造器
    public Wifigongju(Context context) {

        // 取得WifiManager对象
        mWifiManager = (WifiManager) context
                .getSystemService(Context.WIFI_SERVICE);

        // 取得WifiInfo对象
        mWifiInfo = ();
    }

    // 打开WIFI
    public void openWifi() {
        if (!()) {
            (true);
        }else {
            return;
        }

    }

    // 关闭WIFI
    public void closeWifi() {
        if (()) {
            (false);
        }
    }

    // 检查当前WIFI状态
    public int checkState() {
        return ();
    }

    // 锁定WifiLock
    public void acquireWifiLock() {
        ();
    }

    // 解锁WifiLock
    public void releaseWifiLock() {
        // 判断时候锁定
        if (()) {
            ();
        }
    }

    // 创建一个WifiLock
    public void creatWifiLock() {
        mWifiLock = ("Test");
    }

    // 得到配置好的网络
    public List<WifiConfiguration> getConfiguration() {
        return mWifiConfiguration;

    }

    // 指定配置好的网络进行连接
    public void connectConfiguration(int index) {
        // 索引大于配置好的网络索引返回
        if (index > ()) {
            return;
        }
        // 连接配置好的指定ID的网络
        ((index).networkId,
                true);
    }

    public void startScan() {
        ();
        // 得到扫描结果
        mWifiList = ();
        // 得到配置好的网络连接
        mWifiConfiguration = ();
    }

    // 得到网络列表
    public List<ScanResult> getWifiList() {
        return mWifiList;
    }

    // 查看扫描结果
    public StringBuilder lookUpScan() {
        StringBuilder stringBuilder = new StringBuilder();
        for (int i = 0; i < (); i++) {
            stringBuilder
                    .append("Index_" + new Integer(i + 1).toString() + ":");
            // 将ScanResult信息转换成一个字符串包
            // 其中把包括:BSSID、SSID、capabilities、frequency、level
            (((i)).toString());
            ("/n");
        }
        return stringBuilder;
    }

    // 得到MAC地址
    public String getMacAddress() {
        return (mWifiInfo == null) ? "NULL" : ();
    }

    // 得到接入点的BSSID
    public String getBSSID() {
        return (mWifiInfo == null) ? "NULL" : ();
    }

    // 得到IP地址
    public int getIPAddress() {
        return (mWifiInfo == null) ? 0 : ();
    }

    // 得到连接的ID
    public int getNetworkId() {
        return (mWifiInfo == null) ? 0 : ();
    }

    // 得到WifiInfo的所有信息包
    public String getWifiInfo() {
        return (mWifiInfo == null) ? "NULL" : ();
    }

    // 添加一个网络并连接
    public boolean addNetwork(WifiConfiguration wcg) {


        int wcgID = (wcg);
        boolean b =  (wcgID, true);
        ("连接状态", (b));
        return b;
    }

    // 断开指定ID的网络
    public void disconnectWifi(int netId) {
        (netId);
        ();
    }


//然后是一个实际应用方法,只验证过没有密码的情况:

    public WifiConfiguration CreateWifiInfo(String SSID, String Password, int Type)
                
    {
//        while (() == WifiManager.WIFI_STATE_ENABLING){
//
//            try {
//                ();
//                (100);
//            } catch (InterruptedException e) {
//                ();
//            }
//        }


        WifiConfiguration config = new WifiConfiguration();
            ();
            ();
            ();
            ();
            ();
             = "\""+SSID+"\"";


            WifiConfiguration tempConfig = (SSID);
            if (tempConfig != null) {
                ();
            }

            if (Type == 1) //WIFICIPHER_NOPASS
            {
                [0] = "";
                ();
                 = 0;
            }
            if (Type == 2) //WIFICIPHER_WEP
            {
                 = true;
                [0] = "\""+Password+"\"";
                ();
                ();
                ();
                (.WEP40);
                (.WEP104);
                ();
                 = 0;
            }
            if (Type == 3) //WIFICIPHER_WPA
            {
                 ="\""+Password+"\"";
                 = true;
                ();
                ();
                (.WPA_PSK);
                ();
                //();
                ();
                ();
                 = ;
            }
            

        return config;
    }

    private WifiConfiguration IsExsits(String SSID)
    {
        while (()==null){

            try {
                ();
                (200);
            } catch (InterruptedException e) {
                ();
            }
        }

        List<WifiConfiguration> existingConfigs = ();
            for (WifiConfiguration existingConfig : existingConfigs) {
                if (("\"" + SSID + "\"")) {
                    return existingConfig;
                }
            }

        return null;
    }
}

这个类是通用的只要连接WIFI就可以使用这个工具类 

 由于连接WIFI需要权限,所以我们需要授权

授权(z这是一个封装好的回调接口)动态授权

 

public class BaseActivity extends AppCompatActivity {
    public interface PermissionListener {

        void onGranted();//已授权

        void onDenied(List<String> deniedPermission);//未授权

    }

    private PermissionListener mListener;
    private static final int PERMISSION_REQUESTCODE = 100;

    @Override
    public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) {
        (savedInstanceState, persistentState);

    }

    public void requestRunPermisssion(String[] permissions, PermissionListener listener){
        mListener = listener;
        List<String> permissionLists = new ArrayList<>();
        for(String permission : permissions){
            if((this, permission) != PackageManager.PERMISSION_GRANTED){
                (permission);
            }
        }

        if(!()){
            (this, (new String[()]), PERMISSION_REQUESTCODE);
        }else{
            //表示全都授权了
            ();
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        (requestCode, permissions, grantResults);
        switch (requestCode){
            case PERMISSION_REQUESTCODE:
                if( > 0){
                    //存放没授权的权限
                    List<String> deniedPermissions = new ArrayList<>();
                    for(int i = 0; i < ; i++){
                        int grantResult = grantResults[i];
                        String permission = permissions[i];
                        if(grantResult != PackageManager.PERMISSION_GRANTED){
                            (permission);
                        }
                    }
                    if(()){
                        //说明都授权了
                        ();
                    }else{
                        (deniedPermissions);
                    }
                }
                break;
            default:
                break;
        }
    }
}

 接下来我们只需要在Main中使用 

 

public class MainActivity extends BaseActivity {
    private Button button;
    private SharedPreferences sharedPreferences;
    private TextView shuju;
    private TextView jieguo;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        (savedInstanceState);
        setContentView(.activity_main);
        chushihua();
        sharedPreferences = getSharedPreferences("wifi", 0);
        dongtaishouquan();


    }


    private void dongtaishouquan() {
        requestRunPermisssion(new String[]{.CHANGE_NETWORK_STATE, .CHANGE_WIFI_STATE, .ACCESS_NETWORK_STATE, .ACCESS_WIFI_STATE, .ACCESS_FINE_LOCATION}, new PermissionListener() {
            @Override
            public void onGranted() {
                if (("mingzi", "sss").equals("sss") && ("mima", "0").equals("0")) {
                    ("失败原因没有设置wifi,请点击下方按钮设置要连接的wifi");
                } else {
                    Wifigongju wifigongju = new Wifigongju(getApplicationContext());
                    ();

                    boolean b = ((("mingzi", "sss"), ("mima", "0"), 3));
                    if (b) {
                        ("连接成功");
                        ("已连接至" + ());
                    } else {
                        ("连接失败");
                    }
                }
            }
            @Override
            public void onDenied(List<String> deniedPermission) {

            }
        });

    }
        private void chushihua () {
            button = (Button) findViewById();
            (new () {
                @Override
                public void onClick(View v) {
                    startActivity(new Intent(getApplicationContext(), ));
                }
            });
            shuju = (TextView) findViewById();
            jieguo = (TextView) findViewById();
        }

    }

最后权限说明 (重要

<uses-permission android:name=".CHANGE_NETWORK_STATE" />
<!-- //修改网络状态权限 -->
<uses-permission android:name=".CHANGE_WIFI_STATE" />
<!-- 修改wifi状态的权限 -->
<uses-permission android:name=".ACCESS_NETWORK_STATE" />
<!-- //访问网络权限 -->
<uses-permission android:name=".ACCESS_WIFI_STATE" />
<!-- //访问wifi权限 -->
<uses-permission android:name=".ACCESS_FINE_LOCATION" />
<!-- 定位权限 -->

这些权限最好都加上,防止app炸!

学习永无止境!加油。