国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 系統(tǒng) > Android > 正文

Android編程實(shí)現(xiàn)wifi掃描及連接的方法

2019-12-12 01:09:25
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

本文實(shí)例講述了Android編程實(shí)現(xiàn)wifi掃描及連接的方法。分享給大家供大家參考,具體如下:

主界面,搜索附近WIFI信息

/** * Search WIFI and show in ListView *  */public class MainActivity extends Activity implements OnClickListener,    OnItemClickListener {  private Button search_btn;  private ListView wifi_lv;  private WifiUtils mUtils;  private List<String> result;  private ProgressDialog progressdlg = null;  @Override  protected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    mUtils = new WifiUtils(this);    findViews();    setLiteners();  }  private void findViews() {    this.search_btn = (Button) findViewById(R.id.search_btn);    this.wifi_lv = (ListView) findViewById(R.id.wifi_lv);  }  private void setLiteners() {    search_btn.setOnClickListener(this);    wifi_lv.setOnItemClickListener(this);  }  @Override  public void onClick(View v) {    if (v.getId() == R.id.search_btn) {      showDialog();      new MyAsyncTask().execute();    }  }  /**   * init dialog and show   */  private void showDialog() {    progressdlg = new ProgressDialog(this);    progressdlg.setCanceledOnTouchOutside(false);    progressdlg.setCancelable(false);    progressdlg.setProgressStyle(ProgressDialog.STYLE_SPINNER);    progressdlg.setMessage(getString(R.string.wait_moment));    progressdlg.show();  }  /**   * dismiss dialog   */  private void progressDismiss() {    if (progressdlg != null) {      progressdlg.dismiss();    }  }  class MyAsyncTask extends AsyncTask<Void, Void, Void> {    @Override    protected Void doInBackground(Void... arg0) {      //掃描附近WIFI信息      result = mUtils.getScanWifiResult();      return null;    }    @Override    protected void onPostExecute(Void result) {      super.onPostExecute(result);      progressDismiss();      initListViewData();    }  }  private void initListViewData() {    if (null != result && result.size() > 0) {      wifi_lv.setAdapter(new ArrayAdapter<String>(          getApplicationContext(), R.layout.wifi_list_item,          R.id.ssid, result));    } else {      wifi_lv.setEmptyView(findViewById(R.layout.list_empty));    }  }  @Override  public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {    TextView tv = (TextView) arg1.findViewById(R.id.ssid);    if (!TextUtils.isEmpty(tv.getText().toString())) {      Intent in = new Intent(MainActivity.this, WifiConnectActivity.class);      in.putExtra("ssid", tv.getText().toString());      startActivity(in);    }  }}
/** * 連接指定的WIFI * */public class WifiConnectActivity extends Activity implements OnClickListener {  private Button connect_btn;  private TextView wifi_ssid_tv;  private EditText wifi_pwd_tv;  private WifiUtils mUtils;  // wifi之ssid  private String ssid;  private String pwd;  private ProgressDialog progressdlg = null;  @SuppressLint("HandlerLeak")  private Handler mHandler = new Handler() {    public void handleMessage(android.os.Message msg) {      switch (msg.what) {      case 0:        showToast("WIFI連接成功");        finish();        break;      case 1:        showToast("WIFI連接失敗");        break;      }      progressDismiss();    }  };  @Override  protected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_connect);    mUtils = new WifiUtils(this);    findViews();    setLiteners();    initDatas();  }  /**   * init dialog   */  private void progressDialog() {    progressdlg = new ProgressDialog(this);    progressdlg.setCanceledOnTouchOutside(false);    progressdlg.setCancelable(false);    progressdlg.setProgressStyle(ProgressDialog.STYLE_SPINNER);    progressdlg.setMessage(getString(R.string.wait_moment));    progressdlg.show();  }  /**   * dissmiss dialog   */  private void progressDismiss() {    if (progressdlg != null) {      progressdlg.dismiss();    }  }  private void initDatas() {    ssid = getIntent().getStringExtra("ssid");    if (!TextUtils.isEmpty(ssid)) {      ssid = ssid.replace("/"", "");    }    this.wifi_ssid_tv.setText(ssid);  }  private void findViews() {    this.connect_btn = (Button) findViewById(R.id.connect_btn);    this.wifi_ssid_tv = (TextView) findViewById(R.id.wifi_ssid_tv);    this.wifi_pwd_tv = (EditText) findViewById(R.id.wifi_pwd_tv);  }  private void setLiteners() {    connect_btn.setOnClickListener(this);  }  @Override  public void onClick(View v) {    if (v.getId() == R.id.connect_btn) {// 下一步操作      pwd = wifi_pwd_tv.getText().toString();      // 判斷密碼輸入情況      if (TextUtils.isEmpty(pwd)) {        Toast.makeText(this, "請(qǐng)輸入wifi密碼", Toast.LENGTH_SHORT).show();        return;      }      progressDialog();      // 在子線(xiàn)程中處理各種業(yè)務(wù)      dealWithConnect(ssid, pwd);    }  }  private void dealWithConnect(final String ssid, final String pwd) {    new Thread(new Runnable() {      @Override      public void run() {        Looper.prepare();        // 檢驗(yàn)密碼輸入是否正確        boolean pwdSucess = mUtils.connectWifiTest(ssid, pwd);        try {          Thread.sleep(4000);        } catch (Exception e) {          e.printStackTrace();        }        if (pwdSucess) {          mHandler.sendEmptyMessage(0);        } else {          mHandler.sendEmptyMessage(1);        }      }    }).start();  }  private void showToast(String str) {    Toast.makeText(WifiConnectActivity.this, str, Toast.LENGTH_SHORT).show();  }}

工具類(lèi):

public class WifiUtils {  // 上下文Context對(duì)象  private Context mContext;  // WifiManager對(duì)象  private WifiManager mWifiManager;  public WifiUtils(Context mContext) {    this.mContext = mContext;    mWifiManager = (WifiManager) mContext        .getSystemService(Context.WIFI_SERVICE);  }  /**   * 判斷手機(jī)是否連接在Wifi上   */  public boolean isConnectWifi() {    // 獲取ConnectivityManager對(duì)象    ConnectivityManager conMgr = (ConnectivityManager) mContext        .getSystemService(Context.CONNECTIVITY_SERVICE);    // 獲取NetworkInfo對(duì)象    NetworkInfo info = conMgr.getActiveNetworkInfo();    // 獲取連接的方式為wifi    State wifi = conMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI)        .getState();    if (info != null && info.isAvailable() && wifi == State.CONNECTED)    {      return true;    } else {      return false;    }  }  /**   * 獲取當(dāng)前手機(jī)所連接的wifi信息   */  public WifiInfo getCurrentWifiInfo() {    return mWifiManager.getConnectionInfo();  }  /**   * 添加一個(gè)網(wǎng)絡(luò)并連接 傳入?yún)?shù):WIFI發(fā)生配置類(lèi)WifiConfiguration   */  public boolean addNetwork(WifiConfiguration wcg) {    int wcgID = mWifiManager.addNetwork(wcg);    return mWifiManager.enableNetwork(wcgID, true);  }  /**   * 搜索附近的熱點(diǎn)信息,并返回所有熱點(diǎn)為信息的SSID集合數(shù)據(jù)   */  public List<String> getScanWifiResult() {    // 掃描的熱點(diǎn)數(shù)據(jù)    List<ScanResult> resultList;    // 開(kāi)始掃描熱點(diǎn)    mWifiManager.startScan();    resultList = mWifiManager.getScanResults();    ArrayList<String> ssids = new ArrayList<String>();    if (resultList != null) {      for (ScanResult scan : resultList) {        ssids.add(scan.SSID);// 遍歷數(shù)據(jù),取得ssid數(shù)據(jù)集      }    }    return ssids;  }  /**   * 連接wifi 參數(shù):wifi的ssid及wifi的密碼   */  public boolean connectWifiTest(final String ssid, final String pwd) {    boolean isSuccess = false;    boolean flag = false;    mWifiManager.disconnect();    boolean addSucess = addNetwork(CreateWifiInfo(ssid, pwd, 3));    if (addSucess) {      while (!flag && !isSuccess) {        try {          Thread.sleep(10000);        } catch (InterruptedException e1) {          e1.printStackTrace();        }        String currSSID = getCurrentWifiInfo().getSSID();        if (currSSID != null)          currSSID = currSSID.replace("/"", "");        int currIp = getCurrentWifiInfo().getIpAddress();        if (currSSID != null && currSSID.equals(ssid) && currIp != 0) {          isSuccess = true;        } else {          flag = true;        }      }    }    return isSuccess;  }  /**   * 創(chuàng)建WifiConfiguration對(duì)象 分為三種情況:1沒(méi)有密碼;2用wep加密;3用wpa加密   *    * @param SSID   * @param Password   * @param Type   * @return   */  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;  }  private WifiConfiguration IsExsits(String SSID) {    List<WifiConfiguration> existingConfigs = mWifiManager        .getConfiguredNetworks();    for (WifiConfiguration existingConfig : existingConfigs) {      if (existingConfig.SSID.equals("/"" + SSID + "/"")) {        return existingConfig;      }    }    return null;  }}

主站蜘蛛池模板: 莱西市| 开化县| 阿图什市| 萍乡市| 封开县| 水富县| 巴东县| 汨罗市| 宾阳县| 亳州市| 呼图壁县| 蓬安县| 长阳| 和田县| 栾川县| 会理县| 原平市| 江北区| 木兰县| 宁都县| 雷州市| 张掖市| 石嘴山市| 凌源市| 锦州市| 苏尼特左旗| 朔州市| 安新县| 洛阳市| 昂仁县| 嘉祥县| 宜宾市| 贵德县| 宜宾县| 合肥市| 广宗县| 亚东县| 澄迈县| 建德市| 宝清县| 湖南省|