最近搞了个无线wifi模块,兴趣爱好写了个android wifi密码连接,先将成果分享出来,谢谢大家指出不足,欢迎点赞。
功能点:连接wifi模块,包括无密码和加密方式。异步连接,不会导致ANR。
自动保存wifi密码。
先上图:刷新wifi站点信息
连接我的wifi模块,没密码是ok的,有密码的我也先试了一把,所有密码自动保存了(代码中体现)
连接成功(通过获取到ip地址来判断是否连接成功)ip地址有打印输出
直接上代码,MainActivity直接继承至ListActivity,wifi连接模块主要用到android的WifiManager,WifiInfo和输出结果集ScanResult.
public class MainActivity extends ListActivity {
private static final String TAG = "MainActivity";
private static final boolean D = true;
private WifiManager wifiManager;
private WifiInfo current_wifiInfo;// 当前连接的wifi
// 扫描结果列表
private List<ScanResult> list_scan;// wifi列表
private ScanResult scanResult;
private int current_wifi_index;//当前点击的wifi索引
// 添加有图片的ListActivity
private ArrayList<HashMap<String, Object>> hashmap_wifi_items = new ArrayList<HashMap<String, Object>>();;
private SimpleAdapter simpleAdapter;
private ProgressDialog progressDialog;
private EditText edt_wifi_password = null;
private AlertDialog connect_wifi_alertdialog;
private boolean is_connect_wifi_thread = false;
private ConnectWifiThread connect_wifi_thread = null;
private final String PREFERENCES_NAME = "userinfo";
private String wifi_password = "";
创建activity是打开wifi刷新列表得到wifi结果集,加载到listView里面。我们会看到图1的效果
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_wifi_list);
wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
openWifi();
current_wifiInfo = wifiManager.getConnectionInfo();
getAllNetWorkList();
simpleAdapter = new SimpleAdapter(this, hashmap_wifi_items,
R.layout.item_wifi_list, new String[] { "ItemTitle",
"ItemImage" }, new int[] { R.id.wifiTextView,
R.id.wifiImageView });
this.setListAdapter(simpleAdapter);
}
Handler handler = new Handler() {
public void handleMessage(Message msg) {
if(D) Log.v(TAG, "msg.what = " + msg.what);
SharedPreferences vPreferences = getSharedPreferences(
PREFERENCES_NAME, Activity.MODE_PRIVATE);
Editor vEditor = vPreferences.edit();
switch (msg.what) {
case 0:
new RefreshSsidThread().start();
break;
case 1:
new AlertDialog.Builder(MainActivity.this)
.setMessage("连接失败,请重新连接!")
.setPositiveButton("确定",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int whichButton) {
}
}).show();
break;
case 3:
LayoutInflater inflater = getLayoutInflater();
View layout = inflater.inflate(R.layout.access_point_dialog,
(ViewGroup) findViewById(R.id.dialog));
edt_wifi_password = (EditText) layout
.findViewBy