ConnectWifiActivity.java 5.51 KB
package com.sunvote.xpadapp;

import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
import android.content.Intent;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.provider.Settings;
import android.text.TextUtils;
import android.widget.TextView;
import android.widget.Toast;

import com.sunvote.util.LogUtil;
import com.sunvote.xpadapp.base.BaseActivity;
import com.sunvote.xpadapp.utils.WiFiConnecter;
import com.uuzuche.lib_zxing.activity.CaptureActivity;
import com.uuzuche.lib_zxing.activity.CodeUtils;

/**
 * Created by Elvis on 2017/12/13 11:38
 * Email:Eluis@psunsky.com
 * 版权所有:长沙中天电子设计开发有限公司
 * Description: 人大通用版XPadAppRD
 */
public class ConnectWifiActivity extends BaseActivity implements WiFiConnecter.ActionListener {

    public static final String TAG = "ConnectWifiActivity" ;

    /**
     * 扫描跳转Activity RequestCode
     */
    public static final int REQUEST_CODE = 111;

    private WiFiConnecter mWiFiConnecter;
    private WifiManager mWifiManager;
    private TextView msg ;
    private String ssid;
    private String password;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_qrcode_connect_wifi);
        msg = findViewById(R.id.msg);
        Intent intent = new Intent(getApplication(), CaptureActivity.class);
        startActivityForResult(intent, REQUEST_CODE);
    }

    private void init() {
        mWifiManager = (WifiManager)getApplicationContext().getSystemService(Context.WIFI_SERVICE);
        mWiFiConnecter = new WiFiConnecter(this);
    }

    @Override
    protected void onStart() {
        super.onStart();
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        /**
         * 处理二维码扫描结果
         */
        if (requestCode == REQUEST_CODE) {
            //处理扫描结果(在界面上显示)
            if (null != data) {
                Bundle bundle = data.getExtras();
                if (bundle!= null && bundle.getInt(CodeUtils.RESULT_TYPE) == CodeUtils.RESULT_SUCCESS) {
                    String result = bundle.getString(CodeUtils.RESULT_STRING);
                    LogUtil.i(TAG,"Scan Result:" + result);
                    ssid = getSSIDByQRcode(result) ;
                    msg.setText("正在连接wifi:" + ssid);
                    password = getPasswordByQRcode(result) ;
                    String security = getSecurityByQRcode(result);
                    if(security.equals("WPA")){
                        LogUtil.i(TAG,"Change  security:" + security);
                        security = "WPA2" ;
                    }
                    if(!TextUtils.isEmpty(ssid)) {
                        init();
                        mWiFiConnecter.connect(ssid, password, security, this);
                    }else {
                        Toast.makeText(ConnectWifiActivity.this,"二维码错误!",Toast.LENGTH_SHORT).show();
                        finish();
                    }
                }else{
                    finish();
                }
            }else{
                finish();
            }
        }else{
            finish();
        }
    }

    @Override
    public void onStarted(String ssid) {
        msg.setText("正在连接wifi:" + ssid);
    }

    @Override
    public void onSuccess(WifiInfo info) {
        Toast.makeText(this,"连接成功",Toast.LENGTH_SHORT).show();
        finish();
    }

    @Override
    public void onFailure() {
        msg.setText("wifi:" + ssid + "连接失败!");
        Toast.makeText(this,"连接失败,请尝试手动连接!",Toast.LENGTH_LONG).show();
        ClipboardManager cm = (ClipboardManager) getApplicationContext().getSystemService(Context
                .CLIPBOARD_SERVICE);
        ClipData clip = ClipData.newPlainText("clip", password);
        cm.setPrimaryClip(clip);
        Intent intent = new Intent(Settings.ACTION_WIFI_SETTINGS);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(intent); //直接进入手机中的wifi网络设置界面
        if(mWiFiConnecter != null) {
            mWiFiConnecter.onResume();
            mWiFiConnecter = null;
        }
        finish();
    }

    @Override
    public void onFinished(boolean isSuccessed) {
        if(isSuccessed){
            msg.setText("wifi:" + ssid + "连接成功!");
        }else{
            msg.setText("wifi:" + ssid + "连接失败!");
        }
    }

    public String getSSIDByQRcode(String qrcodeStr){
        String[] strs = qrcodeStr.split(";");
        for(String str:strs){
            if(str.length() > 2 && str.toLowerCase().startsWith("s:")){
                return str.substring(2);
            }
        }
        return "";
    }

    public String getPasswordByQRcode(String qrcodeStr){
        String[] strs = qrcodeStr.split(";");
        for(String str:strs){
            if(str.length() > 2 && str.toLowerCase().startsWith("p:")){
                return str.substring(2);
            }
        }
        return "";
    }
    public String getSecurityByQRcode(String qrcodeStr){
        String[] strs = qrcodeStr.split(";");
        for(String str:strs){
            if(str.length() > 7 && str.toLowerCase().startsWith("wifi:")){
                return str.substring(7);
            }
        }
        return "";
    }

    @Override
    public void onBackPressed() {

    }
}