Android编程实现wifi扫描及连接的方法
本文实例讲述了Android编程实现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 Listresult; 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 { @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 ( 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(); // 在子线程中处理各种业务 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; } } /** * 获取当前手机所连接的wifi信息 */ public WifiInfo getCurrentWifiInfo() { return mWifiManager.getConnectionInfo(); } /** * 添加一个网络并连接 传入参数:WIFI发生配置类WifiConfiguration */ public boolean addNetwork(WifiConfiguration wcg) { int wcgID = mWifiManager.addNetwork(wcg); return mWifiManager.enableNetwork(wcgID, true); } /** * 搜索附近的热点信息,并返回所有热点为信息的SSID集合数据 */ public ListgetScanWifiResult() { // 扫描的热点数据 List resultList; // 开始扫描热点 mWifiManager.startScan(); resultList = mWifiManager.getScanResults(); ArrayList ssids = new ArrayList (); if (resultList != null) { for (ScanResult scan : resultList) { ssids.add(scan.SSID);// 遍历数据,取得ssid数据集 } } return ssids; } /** * 连接wifi 参数: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; } /** * 创建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 existingConfigs = mWifiManager .getConfiguredNetworks(); for (WifiConfiguration existingConfig : existingConfigs) { if (existingConfig.SSID.equals("\"" + SSID + "\"")) { return existingConfig; } } return null; } }
—–相关布局文件————–
主页面
连接页面
主页面ListView的item
主界面未搜索 到WIFI的展示
github上DEMO下载地址:https://github.com/ldm520/WIFI_TOOL
更多关于Android相关内容感兴趣的读者可查看本站专题:《Android通信方式总结》、《Android硬件相关操作与应用总结》、《Android资源操作技巧汇总》、《Android视图View技巧总结》、《Android开发入门与进阶教程》及《Android控件用法总结》
希望本文所述对大家Android程序设计有所帮助。
标题名称:Android编程实现wifi扫描及连接的方法
URL分享:http://scjbc.cn/article/poeccs.html