Android 链接Wifi

Android硬件通信之 WIFI通信 WIFI通信 阅读详情

现需求,当用户开机的时候要进行用户登录与注册。没联网要进行wifi连接,坑爹的是要求引导用户进行wifi连接,所以要做一个简单的wifi连接跳到登录页面的操作。


解决方案:

        1.获取wifi列表,也就是扫描wifi,很简单,网上代码一大把。

    /**
     * 扫描wifi
     */
    public void startScan() {
        mWifiManager.startScan();
        // 得到扫描结果
        mWifiList = mWifiManager.getScanResults();
        // 得到配置好的网络连接
        mWifiConfigurations = mWifiManager.getConfiguredNetworks();
    }

      2.连接wifi。连接wifi好像就是指给wifi添加配置信息,大概的意思是,当你手动连接wifi的时候,输入密码,就相当于给这个wifi添加配置信息的意思。

 /**
     * 添加指定WIFI的配置信息,原列表不存在此SSID
     *
     * @param wifiList
     * @param ssid
     * @param pwd
     * @return
     */
    public int AddWifiConfig(List<ScanResult> wifiList, String ssid, String pwd) {
        int wifiId = -1;
        for (int i = 0; i < wifiList.size(); i++) {
            ScanResult wifi = wifiList.get(i);
            if (wifi.SSID.equals(ssid)) {
                Log.i("AddWifiConfig", "equals");
                WifiConfiguration wifiCong = new WifiConfiguration();
                wifiCong.SSID = "\"" + wifi.SSID + "\"";// \"转义字符,代表"
                wifiCong.preSharedKey = "\"" + pwd + "\"";// WPA-PSK密码
                wifiCong.hiddenSSID = false;
                wifiCong.status = WifiConfiguration.Status.ENABLED;
                wifiId = mWifiManager.addNetwork(wifiCong);// 将配置好的特定WIFI密码信息添加,添加完成后默认是不激活状态,成功返回ID,否则为-1
                if (wifiId != -1) {
                    return wifiId;
                }
            }
        }
        return wifiId;
    }

3.如何判定当前的wifi连接成功,期初想法是获得当前要连的wifi的SSID,可能会拿到密码,与我的密码做比较,但转念一想,wifi的真实密码,是不可能外部透露的。看到百度上别人写的:配置完wifi的信息,再获取一遍WifiInfo,拿到wifiinfo里的ssid与当前我要连接的wifi的ssid比较,如果一致就是连接正确,但亲测有问题。于是我就想这么来:

 RxView.clicks(btn_conn).throttleFirst(1, TimeUnit.SECONDS).subscribe(new Action1<Void>() {
            @Override
            public void call(Void aVoid) {
                pwd=et_pwd.getText().toString();
                //Toast.makeText(WifiActivity.this,currentSSID,Toast.LENGTH_SHORT).show();

                if (pwd!=null&& !TextUtils.isEmpty(pwd)&¤tSSID!=null&&!TextUtils.isEmpty(currentSSID)){
                    ProjectUtils.showDialog(WifiActivity.this);
                    int wifiItemId = wiFiUtils.IsConfiguration("\""
                            + currentSSID + "\"");


                 /*   if (wifiItemId != -1) {
                        if (wiFiUtils.ConnectWifi(wifiItemId)) {
                            // 连接已保存密码的WiFi
                            ProjectUtils.dismissDialog();
                            Toast.makeText(getApplicationContext(), "正在连接",
                                    Toast.LENGTH_SHORT).show();
                        }
                    }else{*/

                        //链接wifi
                        int netId = wiFiUtils
                                .AddWifiConfig(wifiList,
                                        currentSSID,
                                        pwd);
                        if (netId!=-1){
                            wiFiUtils.getConfiguration();// 添加了配置信息,要重新得到配置信息
                            wiFiUtils.ConnectWifi(netId);

                            final int countTime = 0;
                            RxUtils.unsubscribe(subscription);
                             subscription = Observable.interval(0, 1, TimeUnit.SECONDS)
                                    .observeOn(AndroidSchedulers.mainThread())
                                    .map(new Func1<Long, String>() {
                                        @Override
                                        public String call(Long aLong) {
                                            return new SimpleDateFormat("ss").format((countTime + aLong.intValue()) * 1000);
                                        }
                                    }).subscribe(new Action1<String>() {
                                        @Override
                                        public void call(String s) {

                                            WifiInfo wifiInfo = wiFiUtils.getmWifiManager().getConnectionInfo();


                                           // wifiInfo.getState().equals(NetworkInfo.State.CONNECTED)

                                            Log.i("Wifi扫描ING::",s+"/"+wifiInfo.getSSID());
                                            if (s.equals("05")) {

                                                if (ProjectUtils.isNetworkAvailable(WifiActivity.this)){
                                                    ProjectUtils.dismissDialog();
                                                   // if (wifiInfo.getSSID().contains(currentSSID)) {

                                                        RxUtils.unsubscribe(subscription);
                                                        Toast.makeText(WifiActivity.this,"Wifi连接成功",Toast.LENGTH_SHORT).show();
                                                        startActivity(new Intent(WifiActivity.this,UserLoginActivity.class));
                                                        Log.i("Wifi扫描结果::", "Success");

                                                   // }
                                                }

                                            } else if (s.equals("10")) {

                                                ProjectUtils.dismissDialog();
                                                if (!ProjectUtils.isNetworkAvailable(WifiActivity.this)){

                                                    RxUtils.unsubscribe(subscription);
                                                    Log.i("Wifi扫描结果::", "ERROR");
                                                    Toast.makeText(WifiActivity.this,"密码不正确",Toast.LENGTH_SHORT).show();
                                                    et_pwd.setText("");
                                                }else{
                                                    ProjectUtils.dismissDialog();
                                                    RxUtils.unsubscribe(subscription);
                                                    Toast.makeText(WifiActivity.this,"Wifi连接成功",Toast.LENGTH_SHORT).show();
                                                    startActivity(new Intent(WifiActivity.this,UserLoginActivity.class));
                                                    Log.i("Wifi扫描结果::", "Success");


                                                }

                                            }
                                        }
                                    });


                            // RxUtils.countUpTime()
                           /* Toast.makeText(WifiActivity.this,"连接"+currentSSID+"成功",Toast.LENGTH_SHORT).show();

                            if () {
                                // 连接成功,刷新UI
                                ProjectUtils.dismissDialog();


                            }
*/
                        }else {
                            ProjectUtils.dismissDialog();
                            Toast.makeText(WifiActivity.this,"密码必须是八位",Toast.LENGTH_SHORT).show();

                            et_pwd.setText("");
                        }



                   // }










                }else{
                    if (TextUtils.isEmpty(pwd)){
                        Toast.makeText(WifiActivity.this,"请输入wifi密码",Toast.LENGTH_SHORT).show();

                    }
                }
            }
        });

大概的意思是,配置完wifi信息的时候,我起一个线程计时,如果10s内有网就说明wifi连接成功了,没有就密码错了,因为现在基本都是rxjava那一套,线程也相当好控制。不知道大家有没有更加好的方法。


附件:

import android.content.Context;
import android.content.Intent;

import android.content.SharedPreferences;

import android.graphics.Color;
import android.graphics.Typeface;

import android.net.wifi.ScanResult;
import android.net.wifi.WifiInfo;



import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;

import android.widget.AdapterView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;

import android.widget.RelativeLayout;
import android.widget.Toast;

import com.jakewharton.rxbinding.view.RxView;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;

import customview.myspinner.NiceSpinner;
import rx.Observable;
import rx.Subscription;
import rx.android.schedulers.AndroidSchedulers;
import rx.functions.Action1;
import rx.functions.Func1;
import utils.ActivityUtils;
import utils.ProjectUtils;
import utils.RxUtils;
import utils.WiFiUtils;

public class WifiActivity extends BaseActivity {
    private WiFiUtils wiFiUtils;
    private  List<ScanResult> wifiList;
    private NiceSpinner sp_wifi;
    private Typeface mtypeface;
    private String currentSSID;
    private EditText et_pwd;
    private Button btn_conn;
    private String pwd;
    private ImageView iv_back,iv_battery, iv_tf,iv_wifi;
    private RelativeLayout rl_bg;
    Subscription subscription;
    private ActivityUtils activityUtils;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_wifi);
activityUtils=ActivityUtils.getIntance();
        activityUtils.putActivity("WifiActivity",WifiActivity.this);


        initUI();

        batteryState(iv_battery);
        tFCardListener(iv_tf);
        wifiListener(iv_wifi, WifiActivity.this);
        initData();
        /*IntentFilter filter=new IntentFilter();
        filter.addAction(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION);
        registerReceiver(new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                if (intent.getAction().equals(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION)) {


                    int linkWifiResult = intent.getIntExtra(WifiManager.EXTRA_SUPPLICANT_ERROR, 123);

                    Log.i("MYWIFI::","wifi密码错误广播"+linkWifiResult);

                    if (linkWifiResult == WifiManager.ERROR_AUTHENTICATING) {
                        Toast.makeText(WifiActivity.this,"连接"+currentSSID+"失败,请核对密码",Toast.LENGTH_SHORT).show();

                    }



                }
            }
        },filter);*/
    }

    @Override
    protected void onResume() {
        super.onResume();
        /**
         * 放送禁止菜单键的广播
         */
        Intent intent=new Intent();
        intent.setAction("menu_disable");
        sendBroadcast(intent);
    }

    private void initUI() {
        rl_bg= (RelativeLayout) findViewById(R.id.rl_bg);

        iv_back= (ImageView) findViewById(R.id.iv_back);
        iv_back.setVisibility(View.GONE);

        iv_battery = (ImageView) findViewById(R.id.iv_battery);
        iv_wifi = (ImageView) findViewById(R.id.iv_wifi);
//        RxView.clicks(iv_wifi).throttleFirst(1,TimeUnit.SECONDS).subscribe(new Action1<Void>() {
//            @Override
//            public void call(Void aVoid) {
//                startActivity(new
//                        Intent(Settings.ACTION_WIFI_SETTINGS));
//            }
//        });
        iv_tf = (ImageView) findViewById(R.id.iv_tf);
        sp_wifi= (NiceSpinner) findViewById(R.id.sp_wifi);
        et_pwd= (EditText) findViewById(R.id.et_pwd);
        btn_conn= (Button) findViewById(R.id.btn_conn);

    }

    private void exchangeZhuti(RelativeLayout ll_root) {

        SharedPreferences sp = getSharedPreferences("setting", Context.MODE_PRIVATE);
        String theme = sp.getString("theme", "bgone");

        if (ll_root != null) {
            switch (theme) {
                case "bgone":
                    ll_root.setBackgroundResource(R.mipmap.bgone);
                    break;
                case "bgtwo":
                    ll_root.setBackgroundResource(R.mipmap.bgtwo);
                    break;
                case "bgthree":
                    ll_root.setBackgroundResource(R.mipmap.bgthree);
                    break;
            }
        }


    }


    void getWifi(){
        /**
         * 扫描
         */
        wiFiUtils.startScan();


        List<String> list=new ArrayList<String>();

        wifiList = wiFiUtils.getWifiList();

        wiFiUtils.getConfiguration();


        if (wifiList!=null){

            for (int i = 0; i < wifiList.size(); i++) {
                //Log.i("Wifi扫描结果::",wifiList.get(i).toString());
                list.add(wifiList.get(i).SSID);
            }
            if (wifiList.size()!=0){
                currentSSID=wifiList.get(0).SSID;
            }

            if (list!=null&&list.size()!=0){
                sp_wifi.attachDataSource(list);
            }
        }
    }

    private void initData() {
        /**
         * 加载主题背景
         */
        exchangeZhuti(rl_bg);
        mtypeface = Typeface.createFromAsset(getAssets(), "ziti1.ttf");

        wiFiUtils=new WiFiUtils(WifiActivity.this);



        getWifi();





        sp_wifi.setTextColor(Color.parseColor("#333333"));
        sp_wifi.setTypeface(mtypeface);




        sp_wifi.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                if (wifiList!=null&&position<wifiList.size()){
                    currentSSID=wifiList.get(position).SSID;
                }

                Log.i("HHH::","onItemSelected");
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {
                Log.i("HHH::","onNothingSelected");
            }
        });


        sp_wifi.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.i("HHH::","onClick");
                getWifi();
            }
        });


        RxView.clicks(btn_conn).throttleFirst(1, TimeUnit.SECONDS).subscribe(new Action1<Void>() {
            @Override
            public void call(Void aVoid) {
                pwd=et_pwd.getText().toString();
                //Toast.makeText(WifiActivity.this,currentSSID,Toast.LENGTH_SHORT).show();

                if (pwd!=null&& !TextUtils.isEmpty(pwd)&¤tSSID!=null&&!TextUtils.isEmpty(currentSSID)){
                    ProjectUtils.showDialog(WifiActivity.this);
                    int wifiItemId = wiFiUtils.IsConfiguration("\""
                            + currentSSID + "\"");


                 /*   if (wifiItemId != -1) {
                        if (wiFiUtils.ConnectWifi(wifiItemId)) {
                            // 连接已保存密码的WiFi
                            ProjectUtils.dismissDialog();
                            Toast.makeText(getApplicationContext(), "正在连接",
                                    Toast.LENGTH_SHORT).show();
                        }
                    }else{*/

                        //链接wifi
                        int netId = wiFiUtils
                                .AddWifiConfig(wifiList,
                                        currentSSID,
                                        pwd);
                        if (netId!=-1){
                            wiFiUtils.getConfiguration();// 添加了配置信息,要重新得到配置信息
                            wiFiUtils.ConnectWifi(netId);

                            final int countTime = 0;
                            RxUtils.unsubscribe(subscription);
                             subscription = Observable.interval(0, 1, TimeUnit.SECONDS)
                                    .observeOn(AndroidSchedulers.mainThread())
                                    .map(new Func1<Long, String>() {
                                        @Override
                                        public String call(Long aLong) {
                                            return new SimpleDateFormat("ss").format((countTime + aLong.intValue()) * 1000);
                                        }
                                    }).subscribe(new Action1<String>() {
                                        @Override
                                        public void call(String s) {

                                            WifiInfo wifiInfo = wiFiUtils.getmWifiManager().getConnectionInfo();


                                           // wifiInfo.getState().equals(NetworkInfo.State.CONNECTED)

                                            Log.i("Wifi扫描ING::",s+"/"+wifiInfo.getSSID());
                                            if (s.equals("05")) {

                                                if (ProjectUtils.isNetworkAvailable(WifiActivity.this)){
                                                    ProjectUtils.dismissDialog();
                                                   // if (wifiInfo.getSSID().contains(currentSSID)) {

                                                        RxUtils.unsubscribe(subscription);
                                                        Toast.makeText(WifiActivity.this,"Wifi连接成功",Toast.LENGTH_SHORT).show();
                                                        startActivity(new Intent(WifiActivity.this,UserLoginActivity.class));
                                                        Log.i("Wifi扫描结果::", "Success");

                                                   // }
                                                }

                                            } else if (s.equals("10")) {

                                                ProjectUtils.dismissDialog();
                                                if (!ProjectUtils.isNetworkAvailable(WifiActivity.this)){

                                                    RxUtils.unsubscribe(subscription);
                                                    Log.i("Wifi扫描结果::", "ERROR");
                                                    Toast.makeText(WifiActivity.this,"密码不正确",Toast.LENGTH_SHORT).show();
                                                    et_pwd.setText("");
                                                }else{
                                                    ProjectUtils.dismissDialog();
                                                    RxUtils.unsubscribe(subscription);
                                                    Toast.makeText(WifiActivity.this,"Wifi连接成功",Toast.LENGTH_SHORT).show();
                                                    startActivity(new Intent(WifiActivity.this,UserLoginActivity.class));
                                                    Log.i("Wifi扫描结果::", "Success");


                                                }

                                            }
                                        }
                                    });


                            // RxUtils.countUpTime()
                           /* Toast.makeText(WifiActivity.this,"连接"+currentSSID+"成功",Toast.LENGTH_SHORT).show();

                            if () {
                                // 连接成功,刷新UI
                                ProjectUtils.dismissDialog();


                            }
*/
                        }else {
                            ProjectUtils.dismissDialog();
                            Toast.makeText(WifiActivity.this,"密码必须是八位",Toast.LENGTH_SHORT).show();

                            et_pwd.setText("");
                        }



                   // }










                }else{
                    if (TextUtils.isEmpty(pwd)){
                        Toast.makeText(WifiActivity.this,"请输入wifi密码",Toast.LENGTH_SHORT).show();

                    }
                }
            }
        });


    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if ((keyCode == KeyEvent.KEYCODE_BACK)) {
            return true;
        }else {
            return super.onKeyDown(keyCode, event);
        }

    }
}



package utils;

import android.content.Context;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.util.Log;

import java.util.List;

/**
 * Created by hcy on 2017/8/18 0018.
 */

public class WiFiUtils {
    /**
     * 定义一个WifiManager对象,提供Wifi管理的各种主要API,主要包含wifi的扫描、建立连接、配置信息等
     */
    private WifiManager mWifiManager;

    // WIFIConfiguration描述WIFI的链接信息,包括SSID、SSID隐藏、password等的设置
    private List<WifiConfiguration> wifiConfigList;


    // 定义一个WifiInfo对象
    private WifiInfo mWifiInfo;


    // 扫描出的网络连接列表
    private List<ScanResult> mWifiList;

    // 网络连接列表
    private List<WifiConfiguration> mWifiConfigurations;



    private WifiManager.WifiLock mWifiLock;


    public static final int TYPE_NO_PASSWD = 0x11;
    public static final int TYPE_WEP = 0x12;
    public static final int TYPE_WPA = 0x13;

    public WifiManager getmWifiManager() {
        return mWifiManager;
    }

    public WiFiUtils(Context context) {
        // 获得WifiManager对象
        mWifiManager = (WifiManager) context
                .getSystemService(Context.WIFI_SERVICE);
        /**
         * 如果wifi没有打开,默认打开wifi
         */
        if (!mWifiManager.isWifiEnabled()){
            mWifiManager.setWifiEnabled(true);
        }
        mWifiInfo = mWifiManager.getConnectionInfo();
    }


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


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


    /**
     * 检查当前wifi状态
     *
     * @return
     */
    public int checkState() {
        return mWifiManager.getWifiState();
    }


    /**
     * 锁定wifiLock
     */
    public void acquireWifiLock() {
        mWifiLock.acquire();
    }


    /**
     * 解锁wifiLock
     */
    public void releaseWifiLock() {
        // 判断是否锁定
        if (mWifiLock.isHeld()) {
            mWifiLock.acquire();
        }
    }

    /**
     * 创建一个wifiLock
     */
    public void createWifiLock() {
        mWifiLock = mWifiManager.createWifiLock("test");
    }


    /**
     * 得到配置好的网络
     *
     * @return
     */
    public List<WifiConfiguration> getWiFiConfiguration() {
        return mWifiConfigurations;
    }

    /**
     * 指定配置好的网络进行连接
     *
     * @param index
     */
    public void connetionConfiguration(int index) {
        if (index > mWifiConfigurations.size()) {
            return;
        }
        // 连接配置好指定ID的网络
        mWifiManager.enableNetwork(mWifiConfigurations.get(index).networkId,
                true);
    }


    /**
     * 扫描wifi
     */
    public void startScan() {
        mWifiManager.startScan();
        // 得到扫描结果
        mWifiList = mWifiManager.getScanResults();
        // 得到配置好的网络连接
        mWifiConfigurations = mWifiManager.getConfiguredNetworks();
    }


    /**
     * 得到网络列表
     *
     * @return wifi扫描结果
     */
    public List<ScanResult> getWifiList() {
        return mWifiList;
    }


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

    public String getMacAddress() {
        return (mWifiInfo == null) ? "NULL" : mWifiInfo.getMacAddress();
    }

    public String getBSSID() {
        return (mWifiInfo == null) ? "NULL" : mWifiInfo.getBSSID();
    }

    public int getIpAddress() {
        return (mWifiInfo == null) ? 0 : mWifiInfo.getIpAddress();
    }

    /**
     * 得到连接的ID
     *
     * @return
     */
    public int getNetWordId() {
        return (mWifiInfo == null) ? 0 : mWifiInfo.getNetworkId();
    }
    /**
     * 得到wifiInfo的所有信息
     *
     * @return
     */
    public String getWifiInfo() {
        return (mWifiInfo == null) ? "NULL" : mWifiInfo.toString();
    }

    /**
     * 添加一个网络并连接
     *
     * @param configuration
     */
    public void addNetwork(WifiConfiguration configuration) {
        int wcgId = mWifiManager.addNetwork(configuration);
        mWifiManager.enableNetwork(wcgId, true);
    }


    /**
     * 连接某个wifi
     */
    public WifiConfiguration createWifiInfo(String SSID, String Password,
                                            int Type) {
        WifiConfiguration config = new WifiConfiguration();
        config.allowedAuthAlgorithms.clear();
        config.allowedGroupCiphers.clear();
        config.allowedKeyManagement.clear();
        config.allowedPairwiseCiphers.clear();
        config.allowedProtocols.clear();
        config.SSID = "\"" + SSID + "\"";

        WifiConfiguration tempConfig = this.isExsits(SSID);
        if (tempConfig != null) {
            mWifiManager.removeNetwork(tempConfig.networkId);
        }

        if (Type == 1) // WIFICIPHER_NOPASS
        {
            config.wepKeys[0] = "";
            config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
            config.wepTxKeyIndex = 0;
        }
        if (Type == 2) // WIFICIPHER_WEP
        {
            config.hiddenSSID = true;
            config.wepKeys[0] = "\"" + Password + "\"";
            config.allowedAuthAlgorithms
                    .set(WifiConfiguration.AuthAlgorithm.SHARED);
            config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
            config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
            config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40);
            config.allowedGroupCiphers
                    .set(WifiConfiguration.GroupCipher.WEP104);
            config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
            config.wepTxKeyIndex = 0;
        }
        if (Type == 3) // WIFICIPHER_WPA
        {
            config.preSharedKey = "\"" + Password + "\"";
            config.hiddenSSID = true;
            config.allowedAuthAlgorithms
                    .set(WifiConfiguration.AuthAlgorithm.OPEN);
            config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
            config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
            config.allowedPairwiseCiphers
                    .set(WifiConfiguration.PairwiseCipher.TKIP);
            // config.allowedProtocols.set(WifiConfiguration.Protocol.WPA);
            config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
            config.allowedPairwiseCiphers
                    .set(WifiConfiguration.PairwiseCipher.CCMP);
            config.status = WifiConfiguration.Status.ENABLED;
        }
        return config;
    }

    /**
     * 判断某个wifi是否存在
     */

    private WifiConfiguration isExsits(String ssid) {
        WifiConfiguration config = new WifiConfiguration();

        if (mWifiList.size() > 0) {
            for (int i = 0; i < mWifiList.size(); i++) {
                if (mWifiList.get(i).SSID.equals(ssid)) {

                    config = mWifiConfigurations.get(i);
                }
            }
        }
        return config;
    }


    /**
     * 断开指定ID的网络
     *
     * @param netId
     */
    public void disConnectionWifi(int netId) {
        mWifiManager.disableNetwork(netId);
        mWifiManager.disconnect();
    }

    // ============
    /**
     * 连接指定Id的WIFI
     *
     * @param wifiId
     * @return
     */
    public boolean ConnectWifi(int wifiId) {
        for (int i = 0; i < wifiConfigList.size(); i++) {
            WifiConfiguration wifi = wifiConfigList.get(i);
            if (wifi.networkId == wifiId) {
                while (!(mWifiManager.enableNetwork(wifiId, true))) {// 激活该Id,建立连接
                    Log.i("ConnectWifi",
                            String.valueOf(wifiConfigList.get(wifiId).status));// status:0--已经连接,1--不可连接,2--可以连接
                }
                return true;
            }
        }
        return false;
    }


    /**
     * 得到Wifi配置好的信息
     */
    public void getConfiguration() {
        wifiConfigList = mWifiManager.getConfiguredNetworks();// 得到配置好的网络信息
        for (int i = 0; i < wifiConfigList.size(); i++) {
            Log.i("getConfiguration", wifiConfigList.get(i).SSID);
            Log.i("getConfiguration",
                    String.valueOf(wifiConfigList.get(i).networkId));
        }
    }


    /**
     * 判定指定WIFI是否已经配置好,依据WIFI的地址BSSID,返回NetId
     *
     * @param SSID
     * @return
     */
    public int IsConfiguration(String SSID) {
        Log.i("IsConfiguration", String.valueOf(wifiConfigList.size()));
        for (int i = 0; i < wifiConfigList.size(); i++) {
            Log.i(wifiConfigList.get(i).SSID,
                    String.valueOf(wifiConfigList.get(i).networkId));
            if (wifiConfigList.get(i).SSID.equals(SSID)) {// 地址相同
                return wifiConfigList.get(i).networkId;
            }
        }
        return -1;
    }


    /**
     * 添加指定WIFI的配置信息,原列表不存在此SSID
     *
     * @param wifiList
     * @param ssid
     * @param pwd
     * @return
     */
    public int AddWifiConfig(List<ScanResult> wifiList, String ssid, String pwd) {
        int wifiId = -1;
        for (int i = 0; i < wifiList.size(); i++) {
            ScanResult wifi = wifiList.get(i);
            if (wifi.SSID.equals(ssid)) {
                Log.i("AddWifiConfig", "equals");
                WifiConfiguration wifiCong = new WifiConfiguration();
                wifiCong.SSID = "\"" + wifi.SSID + "\"";// \"转义字符,代表"
                wifiCong.preSharedKey = "\"" + pwd + "\"";// WPA-PSK密码
                wifiCong.hiddenSSID = false;
                wifiCong.status = WifiConfiguration.Status.ENABLED;
                wifiId = mWifiManager.addNetwork(wifiCong);// 将配置好的特定WIFI密码信息添加,添加完成后默认是不激活状态,成功返回ID,否则为-1
                if (wifiId != -1) {
                    return wifiId;
                }
            }
        }
        return wifiId;
    }

}



package utils;
import com.orhanobut.logger.Logger;
import java.text.SimpleDateFormat;
import java.util.TimeZone;
import java.util.concurrent.TimeUnit;
import rx.Observable;
import rx.Subscription;
import rx.android.schedulers.AndroidSchedulers;
import rx.functions.Func1;



/**
 * Created by hcy on 2017/2/24.
 */

public class RxUtils {
    //倒计时
    public static Observable<String> countDownTime(int time) {
        if (time < 0) {
            time = 0;
        }
        final int countTime = time;
        return Observable.interval(0,1, TimeUnit.SECONDS)
                .observeOn(AndroidSchedulers.mainThread())
                .map(new Func1<Long, String>() {
                    @Override
                    public String call(Long aLong) {
                        //解决八小时的时区问题
                        String format = new SimpleDateFormat("ss").format((countTime - aLong.intValue()) * 1000- TimeZone.getDefault().getRawOffset());

                        Logger.i("倒计时::"+format);
                        return format;
                    }
                })
                .take(countTime + 1);

    }


    //正计时

    public static Observable<String> countUpTime() {
        final int countTime = 0;
        return Observable.interval(0,1, TimeUnit.SECONDS)
                .observeOn(AndroidSchedulers.mainThread())
                .map(new Func1<Long, String>() {
                    @Override
                    public String call(Long aLong) {
                        return new SimpleDateFormat("HH:mm:ss").format((countTime + aLong.intValue())*1000);
                    }
                });
    }


    public static void unsubscribe(Subscription subscription) {
        if (subscription != null && !subscription.isUnsubscribed()) {
            subscription.unsubscribe();
        }
    }


}





      




【Android】Android系统下使用adb操作WiFi相关指令 本文整理了Android系统下使用adb操作WiFi的相关指令。 阅读详情

相关推荐

信号转换为图像 时域频域分析

一维信号如何转化为图像?深度学习如何学习 1.当然,直接1d卷积也是可以的。 2. 以信号强度的数值作为纵坐标,以时间为横坐标绘制信号点就可以了。 周霖那个即是 要看看代码是如何做的, 即使是单导联 5000个点,怎么变成50005000的分辨率的 3. 直接把多通道的一维信号合并成二维图像,然后直接按图像卷积的方法去做~~ 2225000这样一个图 ~可以看看语音处理的相关Net,其中比较...

王不留行嘿呦嘿 2万+

android 实现 wifi连接

Android实现WiFi连接 在Android应用程序中,连接到WiFi网络是一项常见的任务。通过使用Android的WifiManager类,我们可以轻松实现WiFi连接和管理。本文将介绍如何在Android应用程序中实现WiFi连接,并附带代码示例。 WiFi连接流程 首先,让我们了解一下WiFi连接的基本流程。下面...

weixin_31677427的博客 2007

mfcc总结,这个mel三角滤波器分组到底是如何起作用的呢?

先看fft频谱图(这是4096字节取样fft计算,横轴频率是从0到512,后边意义不大,未取,纵轴是振幅),那些我随便画的蓝色线,你有什么联想?: 再看,这绿色线,是否有一种上升后,便逐渐式微的感觉,都是三角形的,这或许也是mel当初和绝大多数人看到的: 如果在振幅上加上一条限制的黑线(振幅门槛限制),黑色线以下很多频率就没有意义了,你看,有用的频率连一半(512/2=256)都占不到...

ganggangwawa的博客 9908

1076. Wifi密码 (15)

#include <iostream> using namespace std; int main() { string s; while (cin >> s) if(s.size() == 3 && s[2] == 'T') cout << s[0]-'A'+1; return 0; }

scy的技术博客 1万+

从零到一:STM32G431的DSP库集成与FFT实战避坑指南

本文详细介绍了在STM32G431微控制器上集成CMSIS-DSP库并进行FFT实战开发的完整流程。重点解析了通过CubeMX和Keil环境配置DSP库的关键步骤、编译器宏定义陷阱及解决方案,并提供了FFT算法优化、内存管理及常见问题诊断的实用技巧,帮助开发者高效实现嵌入式信号处理应用。

oauth7security的博客 768

使用LSTM(长短期记忆)模型处理文本数据的典型流程

对于序列到序列的任务(如机器翻译),可以使用LSTM的隐状态来生成目标序列。这些向量捕获了词之间的语义关系,每个词都被表示为一个高维空间中的点,语义上相似的词在向量空间中彼此靠近。这通常是通过创建一个词汇表(vocabulary)来实现的,词汇表中的每个词都会被分配一个唯一的数字ID。:由于LSTM等循环神经网络(RNN)需要固定长度的输入,所以需要将不同长度的句子填充到相同的长度。由于计算机不能直接理解连续的文本,第一步是将文本分割成独立的词或标记(token)。:将词嵌入作为输入传递给LSTM模型。

YHKKun的博客 2498

实战-Android 认证Wifi 连接后自动弹出认证界面

Wifi Portal 认证,自动弹出认证界面

u010927489的专栏 8105

C++面试八股文

和静态多态(又称编译期多态,即在系统编译期间就可以确定程序将要执行哪个函数),其中动态多态是通过虚函数实现的,虚函数是类的成员函数,存在存储虚函数指针的表叫做虚函数表,虚函数表是一个存储类成员虚函数的指针,每个指针都指向调用它的地方,当子类调用虚函数时,就会去虚表里面找自己对应的函数指针,从而实现“谁调用、实现谁”从而实现多态。而C++符号表中的符号不是以函数名命名的,称为函数名修饰规则,虽然函数名相同,但是函数参数等其他属性不同,取的符号也不同,所以不会产生查询歧义的问题,使得函数可以重载。

qq_46676829的博客 904

android 打开wifi并链接到制定ip,在安卓WiFi-Direct连接中获取对等设备IP地址的方法及设备与流程...

本发明涉及通信技术领域,尤其涉及一种在安卓WiFi-Direct连接中获取对等设备IP地址的方法及设备。背景技术:WiFi-Direct标准是指允许无线网络中的设备无需通过无线路由器即可相互连接。与蓝牙技术类似,这种标准允许无线设备以点对点(P2P)形式互连,而且在传输速度与传输距离方面则比蓝牙有大幅提升。在安卓(Android)系统的原生WiFi-Direct框架下,两个设备之间连接成功之后,在...

weixin_42525800的博客 976

深度学习笔记——前向传播与反向传播、神经网络(前馈神经网络与反馈神经网络)、常见算法概要汇总

本文简要介绍深度学习的前向传播与反向传播,以及前馈神经网络与反馈神经网络。

haopinglianlian的博客 3042

白话讲解帕累托前沿点(Pareto Frontier)基础知识与实例解析

排除所有“劣解”,缩小决策范围;量化目标间的“权衡关系”(如“每增加1千元成本,续航提升多少小时”);支持不同场景下的个性化选择,平衡冲突目标。无论是手机选购、汽车设计,还是城市规划,帕累托前沿都是从“混乱的多目标”到“清晰的权衡”的关键桥梁,是现代决策科学中不可或缺的工具。通过数学建模,工程很多问题都可以建模成帕累托前沿求解问题,通过线性规划CPLEX、Gurobi 等优化工具,可以方便进行求解。

2138

android wifi 的链接

wifi链接的步骤如下(至于wifi通讯部分是没有的): 1.得到wifimanager对象 2.检查wifi状态 3.打开wifi 4.扫描wifi并得到最新扫描的结果 5.连接wifi

Mr_Hu 748

基于STM32H5的循环GPDMA链表使用

STM32H503的GPDMA链表模式可实现灵活的数据传输。相比传统DMA直接编程方式,链表模式通过配置多个节点实现分散数据传输,支持循环链表功能。示例展示了如何使用GPDMA链表实现UART1循环发送数据:配置两个DMA节点分别指向不同发送缓冲区,构建循环链表并绑定到DMA通道。关键点包括:清空链表结构体、正确设置循环模式、检查节点配置。此方法提高了DMA使用的灵活性,适用于需要交替传输多段数据的场景。

kevin1499的博客 451

android 通过SSID跟密码链接指定WIFI

代码示例相关视频讲解:数组-Go代码演示如何在Android中通过SSID跟密码链接指定WIFI 作为一名经验丰富的开发者,我将教你如何在Android应用中实现通过SSID和密码链接指定的WIFI网络。这个过程分为几个步骤,下面我将逐步为你展示。 流程图 如何在Android中通过SSID跟密码链接指定WIFI的流程#...

weixin_35772595的博客 723

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

安卓12,修改wifi热点名称

安卓12,修改wifi热点名称

chuyouyinghe的专栏 573

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

android之代码链接wifi

void connect()  {         WifiManager wifi = (WifiManager)getSystemService(Context.WIFI_SERVICE);           WifiConfiguration wc = new WifiConfiguration();           wc.SSID = "\"LingdongAp\""; //wifi

android-星空 698

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

adb wifi链接Android 手机

adb wifi链接手机HOW准备工作完成,现在开始链接 前言: 在做App 自动化时我们可能会受数据线限制,无法同时链接多个设备,这时我们就需要摆脱数据线,使用wifi 链接电脑和手机 HOW 前提: 手机和电脑必须在一个网段内 先使用数据线链接手机是使用adb devices 查看是否链接成功 查看手机ip地址 (设置-WLAN…) 这个自行百度 使用命令查看 IP 地址: adb shell netcfg ping IP 保证电脑能链接上手机的ip eg: ping 192.168.2

Dorom 282

android 判断wifi网络是否链接

public static boolean isWiFiActive(Context inContext) {          WifiManager mWifiManager = (WifiManager) inContext.getSystemService(Context.WIFI_SERVICE);          WifiInfo wifiInfo = mWifiManager.

375

Android WiFi链接底层相关内容

该博客转载于2014.06.11,发布于网易博客,2020.3.25迁移至此。 四个主要的类ScanResult wifiConfiguration WifiInfo WifiManager (1)ScanResult,主要是通过wifi 硬件的扫描来获取一些周边的wifi 热点的信息。 在我们进行wifi 搜索的时候,一般会搜到这些信息,首先是接入点名字、接入点信息的强弱、还有接入点使用的安全...

lxkscm的博客 368

android wifi链接adb

android wifi链接adb

qq_25406415的博客 1340

Android 判断wifi是否链接

Android 判断wifi是否链接public static boolean isWifiConnected(Context context) { NetworkInfo net = getConnectivityManager(context).getActiveNetworkInfo(); return net != null && net.getType() == Conne

564

android wifi 流程图_Android P WiFi 链接以及获取 IP 流程

wifi 链接&获取IP 流程图- Android 每一次版本迭代与更新,对于设备开发商来讲都是挺痛苦的一件事,不少的东西须要移植,须要适配,- 年复一年,日复一日,bug不停,需求不停,尽管再累也是将一些重要的东西记录下来,分享给到你们,- 但愿大家遇到相关问题,顺着流程图以及代码主线,找到缘由(解决问题),- 老三样,先上流程图 代码流程1、关联阶段1. WifiSettings.su...

weixin_39770626的博客 453

android studio wifi adb 链接调试

文章目录1、CMD adb 链接调试2、Android Studio 插件 链接 wifi adb 1、CMD adb 链接调试 1) 手机 电脑 链接 同一 wifi 2) 手机 用数据线 链接电脑,并且打开 开发者选项–>usb 调试 3) 打开 cmd 窗口 adb tcpip 5555 4) 查看手机ip adb shell ifconfig 或者手机设置上查看 IP地址 5)通过IP连接adb adb connect ip adb connect 192.168.11.107

Venus 的博客 998

Android 广播接收 wifi 热点链接

待续······ 文章参考: Android 通过注册广播,实时监听网络连接与断开状态的变化 https://blog.youkuaiyun.com/qq_20785431/article/details/51520459

Venus 的博客 1498

android 链接固定wifi,Android连接指定SSID的WIFI热点

function ConnectWifi(ssid, keyword, type, level) {var SSID = ssid;var Password = keyword;var Context = plus.android.importClass("android.content.Context");var WifiManager = plus.android.importClass("a...

weixin_39668571的博客 639

android 打开wifi链接固定热点,Android打开WiFi、关闭WiFi、打开WiFi热点、关闭WiFi热点以及通过SSID和密码来连接到指定WiFi的实现代码...

Android打开WiFi、关闭WiFi、打开WiFi热点、关闭WiFi热点以及通过SSID和密码来连接到指定WiFi的实现代码需要权限public class WiFi {private WifiManager wifiManager;private final String TAG = getClass().getSimpleName();public WiFi(Context context...

weixin_30433439的博客 1051
上一篇: Android 椭圆轨迹动画
下一篇: android 用java写一个自动适配各种屏幕大小的工具
泡温泉的咸鱼
博客等级 码龄11年 39粉丝 48原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值