安卓——WIFI连接
来源:互联网 发布:淘宝子账号登录密码 编辑:程序博客网 时间:2024/05/21 15:48
在上一篇博客的基础上展开,
上篇博客已经完成到了,得到wifi列表以及其点击事件,接来下我们的操作就是在listView的点击事件中完成。点击即为连接,则需要输入密码,则需要弹出对话框输入密码,然后将SSID与密码进行WIFI连接操作。
1;获取SSID;
2;打开对话框以及获得密码
获取对话框搞了好久,之前是用一个类继承的,后来直接闪退,就改成了直接new对象。
3;连接;创建了一个类来进行连接
案例完整代码;
<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="@drawable/picture3" tools:context="com.zw.wificonnect.MainActivity" > <Button android:id="@+id/open" android:onClick="open" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="打开wifi" /> <Button android:id="@+id/scan" android:onClick="scan" android:layout_alignParentRight="true" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="扫描列表" /> <ListView android:id="@+id/listView" android:layout_below="@+id/open" android:layout_width="match_parent" android:layout_height="wrap_content" > </ListView></RelativeLayout>
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <ImageView android:id="@+id/imageView" android:layout_marginTop="10dp" android:layout_width="wrap_content" android:gravity="center" android:layout_height="30dp" android:src="@drawable/ic_launcher" /> <TextView android:id="@+id/textView" android:layout_marginTop="10dp" android:layout_marginLeft="100dp" android:layout_width="wrap_content" android:gravity="center" android:layout_height="30dp" android:text="TextView" /> </LinearLayout></RelativeLayout>
package com.zw.wificonnect;import java.util.List;import com.zw.wificonnect.WifiConnector.WifiCipherType;import android.annotation.SuppressLint;import android.app.AlertDialog;import android.app.AlertDialog.Builder;import android.content.Context;import android.content.DialogInterface;import android.net.wifi.ScanResult;import android.net.wifi.WifiManager;import android.os.Bundle;import android.support.v7.app.ActionBarActivity;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.view.ViewGroup;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.ListAdapter;import android.widget.ListView;import android.widget.Toast;public class MainActivity extends ActionBarActivity { private WifiManager wifiManager; private List<ScanResult> list; private ListView listView; private ScanResult result; WifiConnector wac; String ssid = null; String psw = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE); wac = new WifiConnector(wifiManager); } public void open(View v){ openWifi(); } public void scan(View v){ init(); } /** * 获取wifi管理者来获取附近wifi链表。 */ private void init() { list = wifiManager.getScanResults(); listView = (ListView) findViewById(R.id.listView); if (list == null) { Toast.makeText(this, "wifi未打开!", Toast.LENGTH_LONG).show(); }else { MyAdapter myAdapter = new MyAdapter(this,list); listView.setAdapter(myAdapter); listView.setOnItemClickListener(new OnItemClickListener(){ @SuppressLint("NewApi") @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { ScanResult scanResult = list.get(position); ssid = scanResult.SSID; final EditText et = new EditText(MainActivity.this); new AlertDialog.Builder(MainActivity.this) .setTitle("请输入密码") .setView(et) .setPositiveButton("确定",new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog,int which) { psw = et.getText().toString(); wac.connect(ssid, psw,psw.equals("") ?WifiCipherType.WIFICIPHER_NOPASS:WifiCipherType.WIFICIPHER_WPA); //Toast.makeText(getApplicationContext(),et.getText(),Toast.LENGTH_SHORT).show(); } }) .setNegativeButton("取消", null) .setCancelable(false).show(); } }); } } /** * 打开WIFI */ private void openWifi() { if (!wifiManager.isWifiEnabled()) { wifiManager.setWifiEnabled(true); } } }
package com.zw.wificonnect;import java.util.List;import android.content.Context;import android.net.wifi.ScanResult;import android.view.LayoutInflater;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.TextView;public class MyAdapter extends BaseAdapter{ LayoutInflater inflater; List<ScanResult> list; public MyAdapter(Context context, List<ScanResult> list) { // TODO Auto-generated constructor stub this.inflater = LayoutInflater.from(context); this.list = list; } @Override public int getCount() { // TODO Auto-generated method stub return list.size(); } @Override public Object getItem(int position) { // TODO Auto-generated method stub return position; } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub View view = null; view = inflater.inflate(R.layout.item_wifi_list, null); //设置item的样式图片; view.setBackgroundResource(R.drawable.msgbox_rec); ScanResult scanResult = list.get(position); TextView textView = (TextView) view.findViewById(R.id.textView); textView.setText(scanResult.SSID); ImageView imageView = (ImageView) view.findViewById(R.id.imageView); //判断信号强度,显示对应的指示图标 if (Math.abs(scanResult.level) > 100) { imageView.setImageResource(R.drawable.wifi_1); } else if (Math.abs(scanResult.level) > 80) { imageView.setImageResource(R.drawable.wifi_2); } else if (Math.abs(scanResult.level) > 70) { imageView.setImageResource(R.drawable.wifi_2); } else if (Math.abs(scanResult.level) > 60) { imageView.setImageResource(R.drawable.wifi_3); } else if (Math.abs(scanResult.level) > 50) { imageView.setImageResource(R.drawable.wifi_3); } else { imageView.setImageResource(R.drawable.wifi_4); } return view; }}
package com.zw.wificonnect;import java.util.List;import android.net.wifi.WifiConfiguration;import android.net.wifi.WifiManager;import android.net.wifi.WifiConfiguration.AuthAlgorithm;import android.net.wifi.WifiConfiguration.KeyMgmt;import android.os.Handler;import android.os.Message;import android.text.TextUtils;import android.util.Log;public class WifiConnector { public Handler mHandler; WifiManager wifiManager; /** * 向UI发送消息 * @param info 消息 */ public void sendMsg(String info) { if (mHandler != null) { Message msg = new Message(); msg.obj = info; mHandler.sendMessage(msg);// 向Handler发送消息 } else { Log.e("wifi", info); } } //WIFICIPHER_WEP是WEP ,WIFICIPHER_WPA是WPA,WIFICIPHER_NOPASS没有密码 public enum WifiCipherType { WIFICIPHER_WEP, WIFICIPHER_WPA, WIFICIPHER_NOPASS, WIFICIPHER_INVALID } // 构造函数 public WifiConnector(WifiManager wifiManager) { this.wifiManager = wifiManager; } // 提供一个外部接口,传入要连接的无线网 public void connect(String ssid, String password, WifiCipherType type) { Thread thread = new Thread(new ConnectRunnable(ssid, password, type)); thread.start(); } // 查看以前是否也配置过这个网络 private WifiConfiguration isExsits(String SSID) { List<WifiConfiguration> existingConfigs = wifiManager .getConfiguredNetworks(); for (WifiConfiguration existingConfig : existingConfigs) { if (existingConfig.SSID.equals("\"" + SSID + "\"")) { return existingConfig; } } return null; } private WifiConfiguration createWifiInfo(String SSID, String Password, WifiCipherType Type) { WifiConfiguration config = new WifiConfiguration(); config.allowedAuthAlgorithms.clear(); config.allowedGroupCiphers.clear(); config.allowedKeyManagement.clear(); config.allowedPairwiseCiphers.clear(); config.allowedProtocols.clear(); config.SSID = "\"" + SSID + "\""; // nopass if (Type == WifiCipherType.WIFICIPHER_NOPASS) { config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE); } // wep if (Type == WifiCipherType.WIFICIPHER_WEP) { if (!TextUtils.isEmpty(Password)) { if (isHexWepKey(Password)) { config.wepKeys[0] = Password; } else { config.wepKeys[0] = "\"" + Password + "\""; } } config.allowedAuthAlgorithms.set(AuthAlgorithm.OPEN); config.allowedAuthAlgorithms.set(AuthAlgorithm.SHARED); config.allowedKeyManagement.set(KeyMgmt.NONE); config.wepTxKeyIndex = 0; } // wpa if (Type == WifiCipherType.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 boolean openWifi() { boolean bRet = true; if (!wifiManager.isWifiEnabled()) { bRet = wifiManager.setWifiEnabled(true); } return bRet; } class ConnectRunnable implements Runnable { private String ssid; private String password; private WifiCipherType type; public ConnectRunnable(String ssid, String password, WifiCipherType type) { this.ssid = ssid; this.password = password; this.type = type; } @Override public void run() { try { // 打开wifi openWifi(); sendMsg("opened"); Thread.sleep(200); // 开启wifi功能需要一段时间(我在手机上测试一般需要1-3秒左右),所以要等到wifi // 状态变成WIFI_STATE_ENABLED的时候才能执行下面的语句 while (wifiManager.getWifiState() == WifiManager.WIFI_STATE_ENABLING) { try { // 为了避免程序一直while循环,让它睡个100毫秒检测…… Thread.sleep(100); } catch (InterruptedException ie) { } } WifiConfiguration wifiConfig = createWifiInfo(ssid, password, type); // if (wifiConfig == null) { sendMsg("wifiConfig is null!"); return; } WifiConfiguration tempConfig = isExsits(ssid); if (tempConfig != null) { wifiManager.removeNetwork(tempConfig.networkId); } int netID = wifiManager.addNetwork(wifiConfig); boolean enabled = wifiManager.enableNetwork(netID, true); sendMsg("enableNetwork status enable=" + enabled); boolean connected = wifiManager.reconnect(); sendMsg("enableNetwork connected=" + connected); sendMsg("连接成功!"); } catch (Exception e) { // TODO: handle exception sendMsg(e.getMessage()); e.printStackTrace(); } } } private static boolean isHexWepKey(String wepKey) { final int len = wepKey.length(); // WEP-40, WEP-104, and some vendors using 256-bit WEP (WEP-232?) if (len != 10 && len != 26 && len != 58) { return false; } return isHex(wepKey); } private static boolean isHex(String key) { for (int i = key.length() - 1; i >= 0; i--) { final char c = key.charAt(i); if (!(c >= '0' && c <= '9' || c >= 'A' && c <= 'F' || c >= 'a' && c <= 'f')) { return false; } } return true; }}
阅读全文
0 0
- 安卓——WIFI连接
- Ubuntu 16.04 wifi创建安卓手机可连接——使用kde5-nm-connection-editor
- 通过WIFI连接安卓设备调试
- 安卓开发使用wifi连接调试
- 安卓系统设置之Wifi连接
- 安卓手机获取当前连接的WIFI相关信息
- 关于安卓4.0无法连接wifi的解决办法。
- 安卓手机获取当前连接的WIFI相关信息
- 使用wifi连接手机调试安卓应用程序
- 安卓手机如何查看已连接的WIFI密码
- 安卓 判断是否已连接上wifi的方法
- 编写安卓app程序自动连接指定wifi
- 安卓手机查看已经连接的WIFI密码
- 安卓——WIFI列表以及点击事件
- 编写安卓程序搜索周围的wifi并实现正在连接的wifi的强度
- 安卓WIFI 移植
- 安卓wifi
- 安卓的WIFI
- @JoinColumn
- Intellij Idea 15 下新建 Hibernate 项目以及如何添加配置
- Android避免进入一页面后EditText自动弹出软键盘
- 【android学习】Fragment
- select 语句查询
- 安卓——WIFI连接
- Android 把bitmap图片的某一部分的颜色改成其他颜色
- 算法总览
- 9列表
- tensorflow1.1/variational_autoencoder
- 11.2 rac psu 补丁
- 使用source命令向MySQL导入超大文件
- Ubuntu下删除两个文件夹下相同文件名且相同内容的文件(分色排版)
- sass的具体使用方法