嗨,今天给大家带来Android开发wifi模块的功能,包涵检查网络状态,开启Wi-Fi,关闭Wi-Fi,扫描附近Wi-Fi,链接Wi-Fi,…

首先创建两个.xml界面,如下:mbtton.xml ,wifi_listitem.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"><LinearLayout
        android:id="@+id/toolbar"android:layout_width="match_parent"android:layout_height="wrap_content"><include layout="@layout/test_gridview_item"/></LinearLayout><LinearLayout
        android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"><Button
            android:id="@+id/check_wifi"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="检查"/><Button
            android:id="@+id/open_wifi"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="打开"/><Button
            android:id="@+id/close_wifi"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="关闭"/><Button
            android:id="@+id/scan_wifi"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="扫描"/><ListView
            android:id="@+id/wifi_list"android:layout_width="match_parent"android:layout_height="wrap_content"></ListView></LinearLayout>
</LinearLayout>

wifi_listitem.xml界面:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"><LinearLayout
        android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"><TextView
            android:id="@+id/ssid"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="123"/><ImageView
            android:id="@+id/wifi_level"android:layout_width="30dip"android:layout_height="30dip"android:background="@mipmap/ic_launcher"/></LinearLayout></LinearLayout>

然后就是建立java,adapter程序(MbuttonActivity.java ,WifiAdmin.java)

import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;import java.util.List;
/*** Created by rnd on 2018/3/12.*/public class MbuttonActivity extends Activity implements View.OnClickListener {public static final String TAG = "MainActivity";private Button check_wifi,open_wifi,close_wifi,scan_wifi;private ListView mlistView;protected WifiAdmin mWifiAdmin;private List<ScanResult> mWifiList;public int level;protected String ssid;private LinearLayout toolbar;protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.mbutton);mWifiAdmin = new WifiAdmin(MbuttonActivity.this);initViews();IntentFilter filter = new IntentFilter(WifiManager.NETWORK_STATE_CHANGED_ACTION);//="android.net.wifi.STATE_CHANGE"  监听wifi状态的变化registerReceiver(mReceiver, filter);mlistView.setOnItemClickListener(new AdapterView.OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View view,int position, long id) {AlertDialog.Builder alert=new AlertDialog.Builder(MbuttonActivity.this);ssid=mWifiList.get(position).SSID;alert.setTitle(ssid);alert.setMessage("输入密码");final EditText et_password=new EditText(MbuttonActivity.this);final SharedPreferences preferences=getSharedPreferences("wifi_password",Context.MODE_PRIVATE);et_password.setText(preferences.getString(ssid, ""));alert.setView(et_password);//alert.setView(view1);alert.setPositiveButton("连接", new DialogInterface.OnClickListener(){@Overridepublic void onClick(DialogInterface dialog, int which) {String pw = et_password.getText().toString();if(null == pw  || pw.length() < 8){Toast.makeText(MbuttonActivity.this, "密码至少8位", Toast.LENGTH_SHORT).show();return;}SharedPreferences.Editor editor=preferences.edit();editor.putString(ssid, pw);   //保存密码editor.commit();mWifiAdmin.addNetwork(mWifiAdmin.CreateWifiInfo(ssid, et_password.getText().toString(), 3));}});alert.setNegativeButton("取消", new DialogInterface.OnClickListener(){@Overridepublic void onClick(DialogInterface dialog, int which) {////mWifiAdmin.removeWifi(mWifiAdmin.getNetworkId());}});alert.create();alert.show();}});}/** 控件初始化* */private void initViews() {check_wifi=(Button) findViewById(R.id.check_wifi);open_wifi=(Button) findViewById(R.id.open_wifi);close_wifi=(Button) findViewById(R.id.close_wifi);scan_wifi=(Button) findViewById(R.id.scan_wifi);mlistView=(ListView) findViewById(R.id.wifi_list);toolbar=findViewById(R.id.toolbar);check_wifi.setOnClickListener(MbuttonActivity.this);open_wifi.setOnClickListener(MbuttonActivity.this);close_wifi.setOnClickListener(MbuttonActivity.this);scan_wifi.setOnClickListener(MbuttonActivity.this);toolbar.setOnClickListener(MbuttonActivity.this);}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.check_wifi:mWifiAdmin.checkState(MbuttonActivity.this);break;case R.id.open_wifi:mWifiAdmin.openWifi(MbuttonActivity.this);break;case R.id.close_wifi:mWifiAdmin.closeWifi(MbuttonActivity.this);break;case R.id.toolbar:finish();break;case R.id.scan_wifi:mWifiAdmin.startScan(MbuttonActivity.this);mWifiList=mWifiAdmin.getWifiList();if(mWifiList!=null){mlistView.setAdapter(new MyAdapter(this,mWifiList));new Utility().setListViewHeightBasedOnChildren(mlistView);}break;default:break;}}@Overridepublic void onPointerCaptureChanged(boolean hasCapture) {}public class MyAdapter extends BaseAdapter{LayoutInflater inflater;List<ScanResult> list;public MyAdapter(Context context, List<ScanResult> list){this.inflater=LayoutInflater.from(context);this.list=list;}@Overridepublic int getCount() {return list.size();}@Overridepublic Object getItem(int position) {return position;}@Overridepublic long getItemId(int position) {return position;}@SuppressLint({ "ViewHolder", "InflateParams" })@Overridepublic View getView(int position, View convertView, ViewGroup parent) {View view=null;view=inflater.inflate(R.layout.wifi_listitem, null);ScanResult scanResult = list.get(position);TextView wifi_ssid=(TextView) view.findViewById(R.id.ssid);ImageView wifi_level=(ImageView) view.findViewById(R.id.wifi_level);wifi_ssid.setText(scanResult.SSID);Log.i(TAG, "scanResult.SSID="+scanResult);level=WifiManager.calculateSignalLevel(scanResult.level,5);if(scanResult.capabilities.contains("WEP")||scanResult.capabilities.contains("PSK")||scanResult.capabilities.contains("EAP")){wifi_level.setImageResource(R.drawable.btoom_withe);}else{wifi_level.setImageResource(R.drawable.btoom_withe);}wifi_level.setImageLevel(level);//判断信号强度,显示对应的指示图标return view;}}/*设置listview的高度*/public class Utility {public void setListViewHeightBasedOnChildren(ListView listView) {ListAdapter listAdapter = listView.getAdapter();if (listAdapter == null) {return;}int totalHeight = 0;for (int i = 0; i < listAdapter.getCount(); i++) {View listItem = listAdapter.getView(i, null, listView);listItem.measure(0, 0);totalHeight += listItem.getMeasuredHeight();}ViewGroup.LayoutParams params = listView.getLayoutParams();params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));listView.setLayoutParams(params);}}//监听wifi状态private BroadcastReceiver mReceiver = new BroadcastReceiver (){@Overridepublic void onReceive(Context context, Intent intent) {ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);NetworkInfo wifiInfo = manager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);if(wifiInfo.isConnected()){WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);String wifiSSID = wifiManager.getConnectionInfo().getSSID();Toast.makeText(context, wifiSSID+"连接成功", 1).show();}}};
}

创建WifiAdmin.java程序入口;

import java.util.ArrayList;
import java.util.List;
import android.content.Context;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.net.wifi.WifiManager.WifiLock;
import android.widget.Toast;public class WifiAdmin {// 定义WifiManager对象private WifiManager mWifiManager;// 定义WifiInfo对象private WifiInfo mWifiInfo;// 扫描出的网络连接列表private List<ScanResult> mWifiList;// 网络连接列表private List<WifiConfiguration> mWifiConfiguration;// 定义一个WifiLockWifiLock mWifiLock;// 构造器public WifiAdmin(Context context) {// 取得WifiManager对象mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);// 取得WifiInfo对象mWifiInfo = mWifiManager.getConnectionInfo();}// 打开WIFIpublic void openWifi(Context context) {if (!mWifiManager.isWifiEnabled()) {mWifiManager.setWifiEnabled(true);}else if (mWifiManager.getWifiState() == 2) {Toast.makeText(context,"亲,Wifi正在开启,不用再开了", Toast.LENGTH_SHORT).show();}else{Toast.makeText(context,"亲,Wifi已经开启,不用再开了", Toast.LENGTH_SHORT).show();}}// 关闭WIFIpublic void closeWifi(Context context) {if (mWifiManager.isWifiEnabled()) {mWifiManager.setWifiEnabled(false);}else if(mWifiManager.getWifiState() == 1){Toast.makeText(context,"亲,Wifi已经关闭,不用再关了", Toast.LENGTH_SHORT).show();}else if (mWifiManager.getWifiState() == 0) {Toast.makeText(context,"亲,Wifi正在关闭,不用再关了", Toast.LENGTH_SHORT).show();}else{Toast.makeText(context,"请重新关闭", Toast.LENGTH_SHORT).show();}}// 检查当前WIFI状态public void checkState(Context context) {if (mWifiManager.getWifiState() == 0) {Toast.makeText(context,"Wifi正在关闭", Toast.LENGTH_SHORT).show();} else if (mWifiManager.getWifiState() == 1) {Toast.makeText(context,"Wifi已经关闭", Toast.LENGTH_SHORT).show();} else if (mWifiManager.getWifiState() == 2) {Toast.makeText(context,"Wifi正在开启", Toast.LENGTH_SHORT).show();} else if (mWifiManager.getWifiState() == 3) {Toast.makeText(context,"Wifi已经开启", Toast.LENGTH_SHORT).show();} else {Toast.makeText(context,"没有获取到WiFi状态", Toast.LENGTH_SHORT).show();}}// 锁定WifiLockpublic void acquireWifiLock() {mWifiLock.acquire();}// 解锁WifiLockpublic void releaseWifiLock() {// 判断时候锁定if (mWifiLock.isHeld()) {mWifiLock.acquire();}}// 创建一个WifiLockpublic void creatWifiLock() {mWifiLock = mWifiManager.createWifiLock("Test");}// 得到配置好的网络public List<WifiConfiguration> getConfiguration() {return mWifiConfiguration;}// 指定配置好的网络进行连接public void connectConfiguration(int index) {// 索引大于配置好的网络索引返回if (index > mWifiConfiguration.size()) {return;}// 连接配置好的指定ID的网络mWifiManager.enableNetwork(mWifiConfiguration.get(index).networkId,true);}public void startScan(Context context) {mWifiManager.startScan();//得到扫描结果List<ScanResult> results = mWifiManager.getScanResults();// 得到配置好的网络连接mWifiConfiguration = mWifiManager.getConfiguredNetworks();if (results == null) {if(mWifiManager.getWifiState()==3){Toast.makeText(context,"当前区域没有无线网络",Toast.LENGTH_SHORT).show();}else if(mWifiManager.getWifiState()==2){Toast.makeText(context,"wifi正在开启,请稍后扫描", Toast.LENGTH_SHORT).show();}else{Toast.makeText(context,"WiFi没有开启", Toast.LENGTH_SHORT).show();}} else {mWifiList = new ArrayList();for(ScanResult result : results){if (result.SSID == null || result.SSID.length() == 0 || result.capabilities.contains("[IBSS]")) {continue;}boolean found = false;for(ScanResult item:mWifiList){if(item.SSID.equals(result.SSID)&&item.capabilities.equals(result.capabilities)){found = true;break;}}if(!found){mWifiList.add(result);}}}}// 得到网络列表public List<ScanResult> getWifiList() {return mWifiList;}// 查看扫描结果public StringBuilder lookUpScan() {StringBuilder stringBuilder = new StringBuilder();for (int i = 0; i < mWifiList.size(); i++) {stringBuilder.append("Index_" + new Integer(i + 1).toString() + ":");// 将ScanResult信息转换成一个字符串包// 其中把包括:BSSID、SSID、capabilities、frequency、levelstringBuilder.append((mWifiList.get(i)).toString());stringBuilder.append("/n");}return stringBuilder;}// 得到MAC地址public String getMacAddress() {return (mWifiInfo == null) ? "NULL" : mWifiInfo.getMacAddress();}// 得到接入点的BSSIDpublic String getBSSID() {return (mWifiInfo == null) ? "NULL" : mWifiInfo.getBSSID();}// 得到IP地址public int getIPAddress() {return (mWifiInfo == null) ? 0 : mWifiInfo.getIpAddress();}// 得到连接的IDpublic int getNetworkId() {return (mWifiInfo == null) ? 0 : mWifiInfo.getNetworkId();}// 得到WifiInfo的所有信息包public String getWifiInfo() {return (mWifiInfo == null) ? "NULL" : mWifiInfo.toString();}// 添加一个网络并连接public void addNetwork(WifiConfiguration wcg) {int wcgID = mWifiManager.addNetwork(wcg);boolean b =  mWifiManager.enableNetwork(wcgID, true);System.out.println("a--" + wcgID);System.out.println("b--" + b);}// 断开指定ID的网络public void disconnectWifi(int netId) {mWifiManager.disableNetwork(netId);mWifiManager.disconnect();}public void removeWifi(int netId) {disconnectWifi(netId);mWifiManager.removeNetwork(netId);}//然后是一个实际应用方法,只验证过没有密码的情况: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;}
}

把代码都复制上去,就可以看到效果啦,是不是特别的爽,感觉好高端大气牛逼?如果觉得此篇文章对您有所帮助,请别忘记关注或点赞,博主还会继续发表更有趣的文章,有问题可以留言,望各位每天进步一点点,学无止境!!

Android开发wifi功能(附近Wi-Fi,输入密码,链接Wi-Fi)相关推荐

  1. 解决:android 开发 WIFI 功能 密码输入正确时监听的问题

    问题描述: 在一个 android 项目中 需要 开发 类似于 系统 wifi 连接的功能,选择可用 wifi 后,输入正确的密码后,WifiManager.SUPPLICANT_STATE_CHAN ...

  2. Android开发常用功能 https://www.2cto.com/kf/201611/561847.html

    Android开发常用功能 2016-11-03 09:43:58          来源:EvanJames的专栏 收藏   我要投稿 1.定时器的实现 (1)采用Handler的postDelay ...

  3. Android开发--WIFI实现

    wifi的基本结构 在Android的官方文档中定义了如下五种状态: WIFI_STATE_DISABLING  WIFI网卡正在关闭  0 WIFI_STATE_DISABLED   WIFI网卡不 ...

  4. Android开发--WIFI输入密码Dialog的实现

    最终实现效果是点击一个未保存密码的WIFI信号时,弹出如下Dialog: 1.定义Dialog的布局文件: <a target=_blank id="L1" href=&qu ...

  5. Android开发需求功能一览表

    按照目前我接触到的功能,大概划分下 模块化 1.独立出硬件相关,提供硬件服务 2.界面和业务逻辑  使用H5(flutter  cordova) flutter也是纯粹独立业务逻辑而已,跟硬件相关还得 ...

  6. Android开发--Wifi的操作

    Android应用程序测试Wifi非常简单,只需要调用系统的Wifi服务即可对Wifi进行管理,但是由于模拟器中不能使用Wifi的功能,所以测试的操作需要在手机上运行,下面是实例代码: public ...

  7. Android开发常用功能

    1.定时器的实现 (1)采用Handler的postDelayed(Runnable, long)方法 <strong>Handler handler = new Handler(); R ...

  8. android开发 书签功能,android studio的喜欢和书签功能

    如果你是一个安卓开发者,你可能已经发现了一些隐藏在Android Studio里面的非常棒的功能.我也不是例外,而昨天我也在纠结(意思是花了些时间去理解)于一些让开发变的更轻松的新功能.这些功能就是书 ...

  9. android开发板功能,嵌入式开发-迅为4418开发板Android4.4.4实现ble功能

    ①.迅为4418开发板Android4.4.4实现ble功能: 在4418/android/device/nexell/drone2/device.mk中添加: frameworks/native/d ...

  10. android开发板功能,Android中NFC模块PN532开发板应用/原理图/PCB等全部资料

    PN532是NXP最近推出的一款NFC芯片,支持读卡器模式和卡模式(需要卡芯片Smart MX),支持TypeA丶TypeB丶TypeC三个标准.该NFC模块PN532开发板特点: @ 内部带一个MC ...

最新文章

  1. [特征工程系列二]显性特征的基本处理方法
  2. Py之glob: glob库文件名模式匹配+返回所有匹配的文件路径列表库的简介、使用方法之详细攻略
  3. 算法练习day18——190409(Manacher)
  4. wxWidgets:wxFont概览
  5. anaconda3 win7_重装系统win7
  6. 以Linux系统(Ubuntu)开发生活(一)
  7. 损失函数、python实现均方误差、交叉熵误差函数、mini-batch的损失函数
  8. linux多cpu运行python脚本,linux系统使用python获取cpu信息脚本分享
  9. 怪物猎人物语稀有9星_怪物猎人崛起武器怎么锻造 武器锻造机制介绍
  10. 腾讯社招 —— 应用宝后端工程师-电话面试
  11. python散点图数据怎么输入_python 散点图添加标签
  12. java.lang.UnsatisfiedLinkError: Library not loaded: @rpath/libo.dylib Reason: image not found
  13. 百度富文本编辑器 设置图片的显示大小
  14. bin是什么文件,要如何打开?
  15. win7搜索文件怎么搜索文件名中带圆括号的文件?
  16. CSDN外链解决方法 (2022-07-28测试可用)
  17. Session的理解
  18. 5年专业研究,这份云原生安全指南请查收
  19. flex:1 的含义 以及属性值1的含义
  20. 谷粒商城项目搭建思路

热门文章

  1. jQuery的下载与基本使用
  2. MySQL:BLOB/TEXT Column Used in Key Specification Without a Key Length
  3. Linux中exec函数用法,linux exec用法总结
  4. 【python】【爬虫】爬取电子书《红星照耀中国》
  5. 嫉妒心太强该怎么办?
  6. 解决Idea中项目模块没有蓝色方块
  7. mysql migration toolkit 使用_MySQL Migration Toolkit的使用
  8. 全年爆文率14%+,这个小红书品牌的内容营销密码是什么?
  9. STM32_HAL_SPI_ADS1256调试记录
  10. zotero+PDF expert+坚果云+iPad