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

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

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

2019-10-22 18:14:47
字體:
供稿:網(wǎng)友

本文實例講述了Android編程實現(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, "請輸入wifi密碼", Toast.LENGTH_SHORT).show();        return;      }      progressDialog();      // 在子線程中處理各種業(yè)務(wù)      dealWithConnect(ssid, pwd);    }  }  private void dealWithConnect(final String ssid, final String pwd) {    new Thread(new Runnable() {      @Override      public void run() {        Looper.prepare();        // 檢驗密碼輸入是否正確        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();  }}

工具類:

public class WifiUtils {  // 上下文Context對象  private Context mContext;  // WifiManager對象  private WifiManager mWifiManager;  public WifiUtils(Context mContext) {    this.mContext = mContext;    mWifiManager = (WifiManager) mContext        .getSystemService(Context.WIFI_SERVICE);  }  /**   * 判斷手機是否連接在Wifi上   */  public boolean isConnectWifi() {    // 獲取ConnectivityManager對象    ConnectivityManager conMgr = (ConnectivityManager) mContext        .getSystemService(Context.CONNECTIVITY_SERVICE);    // 獲取NetworkInfo對象    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)前手機所連接的wifi信息   */  public WifiInfo getCurrentWifiInfo() {    return mWifiManager.getConnectionInfo();  }  /**   * 添加一個網(wǎng)絡(luò)并連接 傳入?yún)?shù):WIFI發(fā)生配置類WifiConfiguration   */  public boolean addNetwork(WifiConfiguration wcg) {    int wcgID = mWifiManager.addNetwork(wcg);    return mWifiManager.enableNetwork(wcgID, true);  }  /**   * 搜索附近的熱點信息,并返回所有熱點為信息的SSID集合數(shù)據(jù)   */  public List<String> getScanWifiResult() {    // 掃描的熱點數(shù)據(jù)    List<ScanResult> resultList;    // 開始掃描熱點    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對象 分為三種情況:1沒有密碼;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;  }}

—–相關(guān)布局文件————–

主頁面

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  xmlns:tools="http://schemas.android.com/tools"  android:layout_width="match_parent"  android:layout_height="match_parent" >  <Button    android:id="@+id/search_btn"    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:layout_margin="10dp"    android:text="搜索附近WIFI"    android:textSize="16sp" >  </Button>  <ListView    android:id="@+id/wifi_lv"    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:layout_below="@id/search_btn"    android:layout_marginTop="10dp"    android:divider="#d1d1d1"    android:dividerHeight="1px"    android:scrollbars="none" >  </ListView></RelativeLayout>

連接頁面

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  xmlns:tools="http://schemas.android.com/tools"  android:layout_width="match_parent"  android:layout_height="match_parent" >  <TextView    android:id="@+id/wifi_ssid"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:layout_marginTop="15dp"    android:padding="10dp"    android:text="@string/wifi_ssid"    android:textSize="16sp" />  <TextView    android:id="@+id/wifi_ssid_tv"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:layout_marginTop="15dp"    android:layout_toRightOf="@id/wifi_ssid"    android:padding="10dp"    android:textSize="16sp" />  <TextView    android:id="@+id/wifi_pwd"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:layout_below="@id/wifi_ssid"    android:layout_marginTop="15dp"    android:padding="10dp"    android:text="@string/wifi_pwd"    android:textSize="16sp" />  <EditText    android:id="@+id/wifi_pwd_tv"    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:layout_below="@id/wifi_ssid_tv"    android:layout_marginRight="15dp"    android:layout_marginTop="15dp"    android:layout_toRightOf="@id/wifi_pwd"    android:hint="@string/input_pwd_hint"    android:padding="10dp"    android:textSize="16sp" />  <Button    android:id="@+id/connect_btn"    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:layout_alignParentBottom="true"    android:layout_margin="10dp"    android:text="連接WIFI"    android:textSize="16sp" >  </Button></RelativeLayout>

主頁面ListView的item

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  xmlns:tools="http://schemas.android.com/tools"  android:layout_width="match_parent"  android:layout_height="40dp"  android:background="#FFFFFF" >  <TextView    android:id="@+id/ssid"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:layout_alignParentLeft="true"    android:layout_centerInParent="true"    android:paddingLeft="15dp"    android:textColor="#333333"    android:textSize="16sp" /></RelativeLayout>

主界面未搜索 到WIFI的展示

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  xmlns:tools="http://schemas.android.com/tools"  android:layout_width="match_parent"  android:layout_height="match_parent"  android:background="#FFFFFF" >  <TextView    android:id="@+id/ssid"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:layout_centerInParent="true"    android:text="附近暫時沒有WIFI"    android:textColor="#333333"    android:textSize="16sp" /></RelativeLayout>

github上DEMO下載地址:https://github.com/ldm520/WIFI_TOOL

希望本文所述對大家Android程序設(shè)計有所幫助。


注:相關(guān)教程知識閱讀請移步到Android開發(fā)頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 建阳市| 宜宾市| 大庆市| 万年县| 涞水县| 和林格尔县| 万源市| 柳林县| 吴忠市| 綦江县| 油尖旺区| 湘潭市| 阿克陶县| 甘德县| 尉犁县| 漳州市| 阿瓦提县| 额尔古纳市| 淄博市| 盐城市| 台州市| 舞阳县| 辰溪县| 马鞍山市| 报价| 禹州市| 许昌县| 福泉市| 库伦旗| 资溪县| 北宁市| 高青县| 平舆县| 华蓥市| 蒙阴县| 十堰市| 汾阳市| 周口市| 涞水县| 蛟河市| 长宁区|