首页| JavaScript| HTML/CSS| Matlab| PHP| Python| Java| C/C++/VC++| C#| ASP| 其他|
购买积分 购买会员 激活码充值

您现在的位置是:虫虫源码 > Java > android 操作 wifi 教程以及项目源码下载

android 操作 wifi 教程以及项目源码下载

  • 资源大小:0.21M
  • 上传时间:2021-07-29
  • 下载次数:0次
  • 浏览次数:0次
  • 资源积分:1积分
  • 标      签: Android平台开发

资 源 简 介

在Android中对Wifi操作,android本身提供了一些有用的包,在android.net.wifi包下面。简单介绍一下:大致可以分为四个主要的类ScanResult,wifiConfiguration,WifiInfo,WifiManager(1)ScanResult,主要是通过wifi 硬件的扫描来获取一些周边的wifi 热点的信息。(2)wifiConfiguration 在我们连通一个wifi 接入点的时候,需要获取到的一些信息。大家可以跟我们有线的设备进行对比一下。(3)WifiInfo 在我们的wifi 已经连通了以后,可以通过这个类获得一些已经连通的wifi 连接的信息获取当前链接的信息,这里信息就比较简单了,这里简单介绍一下这里的方法:       getBSSID() 获取BSSID       getDetailedStateOf() 获取客户端的连通性       getHiddenSSID() 获得SSID 是否被隐藏       getIpAddress() 获取IP 地址       getLinkSpeed() 获得连接的速度       getMacAddress() 获得Mac 地址       getRssi() 获得802.11n 网络的信号       getSSID() 获得SSID       getSupplicanState() 返回具体客户端状态的信息(4)wifiManager 这个不用说,就是用来管理我们的wifi 连接,这里已经定义好了一些类,可以供我们使用。这里来说相对复杂,里面的内容比较多,但是通过字面意思,我们还是可以获得很多相关的信息。这个类里面预先定义了许多常量,我们可以直接使用,不用再次创建。介绍完了,开始写一个Demo吧。程序已启动效果图如下:看代码,其中有注释,我就不多说了。布局文件代码: mWifiConfiguration.size()) {                        return;                }                // 连接配置好的指定ID的网络                mWifiManager.enableNetwork(mWifiConfiguration.get(index).networkId,                                true);        }        public void startScan() {                mWifiManager.startScan();                // 得到扫描结果                mWifiList = mWifiManager.getScanResults();                // 得到配置好的网络连接                mWifiConfiguration = mWifiManager.getConfiguredNetworks();        }        // 得到网络列表        public List 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、level                        stringBuilder.append((mWifiList.get(i)).toString());                        stringBuilder.append("/n");                }                return stringBuilder;        }        // 得到MAC地址        public String getMacAddress() {                return (mWifiInfo == null) ? "NULL" : mWifiInfo.getMacAddress();        }        // 得到接入点的BSSID        public String getBSSID() {                return (mWifiInfo == null) ? "NULL" : mWifiInfo.getBSSID();        }        // 得到IP地址        public int getIPAddress() {                return (mWifiInfo == null) ? 0 : mWifiInfo.getIpAddress();        }        // 得到连接的ID        public 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);                mWifiManager.enableNetwork(wcgID, true);        }        // 断开指定ID的网络        public void disconnectWifi(int netId) {                mWifiManager.disableNetwork(netId);                mWifiManager.disconnect();        }}复制代码最后,我们看一下AndroidManifest.xml配置文件的代码,里面有需要用到的权限。这个比较重要,我刚开始就是忘记添加这些权限,程序一启动就挂。后来看LogCat才知道少了这些权限的。AndroidManifest.xml:                                                                                                                                                                                                                复制代码至此这个Demo就完成了,看效果图。 ```````````````````````````````````````````````本文主要在此基础上,进一步完善程序功能,主要功能有打开无线网卡、关闭无线网卡、检查网卡状态、扫描网络、扫描结果、连接Wifi、断开Wifi、Wifi连接状态。运行效果图如下: 其中连接Wifi是比较让我头疼的。需要在程序中进行连接,这会有两种情况。第一,Wifi没有密码,可以直接连接;第二,Wifi有密码,在程序中给出密码,然后连接。第一种我查阅相关资料好像确实是可以实现的,第二种我没找到,我自己也不知道该怎么去搞。最后想出一个办法,直接让程序跳到系统设置的Wifi的页面,然后让人手动去设置。观察了一下Android版的QQ,也确实是这么做的。不信你瞧: 点击设置网络后跳转到系统设置页面: 所以此处设置网络我也可以这么做,不过还是有点不爽,可能自己对Wifi这块还不是很熟悉,我会继续查阅相关API文档,到时候再跟大家分享,好了,下面贴一下源代码:主页面:package org.sunchao;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.ScrollView;import android.widget.TextView;public class Main extends Activity implements OnClickListener {        // 右侧滚动条按钮        private ScrollView sView;        private Button openNetCard;        private Button closeNetCard;        private Button checkNetCardState;        private Button scan;        private Button getScanResult;        private Button connect;        private Button disconnect;        private Button checkNetWorkState;        private TextView scanResult;        private String mScanResult;        private WifiAdmin mWifiAdmin;        /** Called when the activity is first created. */        @Override        public void onCreate(Bundle savedInstanceState) {                super.onCreate(savedInstanceState);                setContentView(R.layout.main);                mWifiAdmin = new WifiAdmin(Main.this);                init();        }        /**         * 按钮等控件的初始化         */        public void init() {                sView = (ScrollView) findViewById(R.id.mScrollView);                openNetCard = (Button) findViewById(R.id.openNetCard);                closeNetCard = (Button) findViewById(R.id.closeNetCard);                checkNetCardState = (Button) findViewById(R.id.checkNetCardState);                scan = (Button) findViewById(R.id.scan);                getScanResult = (Button) findViewById(R.id.getScanResult);                scanResult = (TextView) findViewById(R.id.scanResult);                connect = (Button) findViewById(R.id.connect);                disconnect = (Button) findViewById(R.id.disconnect);                checkNetWorkState = (Button) findViewById(R.id.checkNetWorkState);                openNetCard.setOnClickListener(Main.this);                closeNetCard.setOnClickListener(Main.this);                checkNetCardState.setOnClickListener(Main.this);                scan.setOnClickListener(Main.this);                getScanResult.setOnClickListener(Main.this);                connect.setOnClickListener(Main.this);                disconnect.setOnClickListener(Main.this);                checkNetWorkState.setOnClickListener(Main.this);        }        /**         * WIFI_STATE_DISABLING 0 WIFI_STATE_DISABLED 1 WIFI_STATE_ENABLING 2         * WIFI_STATE_ENABLED 3         */        public void openNetCard() {                mWifiAdmin.openNetCard();        }        public void closeNetCard() {                mWifiAdmin.closeNetCard();        }        public void checkNetCardState() {                mWifiAdmin.checkNetCardState();        }        public void scan() {                mWifiAdmin.scan();        }        public void getScanResult() {                mScanResult = mWifiAdmin.getScanResult();                scanResult.setText(mScanResult);        }        public void connect() {                mWifiAdmin.connect();//                startActivityForResult(new Intent(//                                android.provider.Settings.ACTION_WIFI_SETTINGS), 0);                startActivity(new Intent(android.provider.Settings.ACTION_WIFI_SETTINGS));        }        public void disconnect() {                mWifiAdmin.disconnectWifi();        }        public void checkNetWorkState() {                mWifiAdmin.checkNetWorkState();        }        @Override        public void onClick(View v) {                switch (v.getId()) {                case R.id.openNetCard:                        openNetCard();                        break;                case R.id.closeNetCard:                        closeNetCard();                        break;                case R.id.checkNetCardState:                        checkNetCardState();                        break;                case R.id.scan:                        scan();                        break;                case R.id.getScanResult:                        getScanResult();                        break;                case R.id.connect:                        connect();                        break;                case R.id.disconnect:                        disconnect();                        break;                case R.id.checkNetWorkState:                        checkNetWorkState();                        break;                default:                        break;                }        }}复制代码Wifi工具类:package org.sunchao;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.util.Log;public class WifiAdmin {        private final static String TAG = "WifiAdmin";        private StringBuffer mStringBuffer = new StringBuffer();        private List listResult;        private ScanResult mScanResult;        // 定义WifiManager对象        private WifiManager mWifiManager;        // 定义WifiInfo对象        private WifiInfo mWifiInfo;        // 网络连接列表        private List mWifiConfiguration;        // 定义一个WifiLock        WifiLock mWifiLock;        /**         * 构造方法         */        public WifiAdmin(Context context) {                mWifiManager = (WifiManager) context                                .getSystemService(Context.WIFI_SERVICE);                mWifiInfo = mWifiManager.getConnectionInfo();        }        /**         * 打开Wifi网卡         */        public void openNetCard() {                if (!mWifiManager.isWifiEnabled()) {                        mWifiManager.setWifiEnabled(true);                }        }        /**         * 关闭Wifi网卡         */        public void closeNetCard() {                if (mWifiManager.isWifiEnabled()) {                        mWifiManager.setWifiEnabled(false);                }        }        /**         * 检查当前Wifi网卡状态         */        public void checkNetCardState() {                if (mWifiManager.getWifiState() == 0) {                        Log.i(TAG, "网卡正在关闭");                } else if (mWifiManager.getWifiState() == 1) {                        Log.i(TAG, "网卡已经关闭");                } else if (mWifiManager.getWifiState() == 2) {                        Log.i(TAG, "网卡正在打开");                } else if (mWifiManager.getWifiState() == 3) {                        Log.i(TAG, "网卡已经打开");                } else {                        Log.i(TAG, "---_---晕......没有获取到状态---_---");                }        }        /**         * 扫描周边网络         */        public void scan() {                mWifiManager.startScan();                listResult = mWifiManager.getScanResults();                if (listResult != null) {                        Log.i(TAG, "当前区域存在无线网络,请查看扫描结果");                } else {                        Log.i(TAG, "当前区域没有无线网络");                }        }        /**         * 得到扫描结果         */        public String getScanResult() {                // 每次点击扫描之前清空上一次的扫描结果                if (mStringBuffer != null) {                        mStringBuffer = new StringBuffer();                }                // 开始扫描网络                scan();                listResult = mWifiManager.getScanResults();                if (listResult != null) {                        for (int i = 0; i < listResult.size(); i ) {                                mScanResult = listResult.get(i);                                mStringBuffer = mStringBuffer.append("NO.").append(i 1)                                                .append(" :").append(mScanResult.SSID).append("->")                                                .append(mScanResult.BSSID).append("->")                                                .append(mScanResult.capabilities).append("->")                                                .append(mScanResult.frequency).append("->")                                                .append(mScanResult.level).append("->")                                                .append(mScanResult.describeContents()).append("");                        }                }                Log.i(TAG, mStringBuffer.toString());                return mStringBuffer.toString();        }        /**         * 连接指定网络         */        public void connect() {                mWifiInfo = mWifiManager.getConnectionInfo();                        }        /**         * 断开当前连接的网络         */        public void disconnectWifi() {                int netId = getNetworkId();                mWifiManager.disableNetwork(netId);                mWifiManager.disconnect();                mWifiInfo = null;        }        /**         * 检查当前网络状态         *          * @return String         */        public void checkNetWorkState() {                if (mWifiInfo != null) {                        Log.i(TAG, "网络正常工作");                } else {                        Log.i(TAG, "网络已断开");                }        }        /**         * 得到连接的ID         */        public int getNetworkId() {                return (mWifiInfo == null) ? 0 : mWifiInfo.getNetworkId();        }        /**         * 得到IP地址         */        public int getIPAddress() {                return (mWifiInfo == null) ? 0 : mWifiInfo.getIpAddress();        }        // 锁定WifiLock        public void acquireWifiLock() {                mWifiLock.acquire();        }        // 解锁WifiLock        public void releaseWifiLock() {                // 判断时候锁定                if (mWifiLock.isHeld()) {                        mWifiLock.acquire();                }        }        // 创建一个WifiLock        public void creatWifiLock() {                mWifiLock = mWifiManager.createWifiLock("Test");        }        // 得到配置好的网络        public List getConfiguration() {                return mWifiConfiguration;        }        // 指定配置好的网络进行连接        public void connectConfiguration(int index) {                // 索引大于配置好的网络索引返回                if (index >= mWifiConfiguration.size()) {                        return;                }                // 连接配置好的指定ID的网络                mWifiManager.enableNetwork(mWifiConfiguration.get(index).networkId,                                true);        }        // 得到MAC地址        public String getMacAddress() {                return (mWifiInfo == null) ? "NULL" : mWifiInfo.getMacAddress();        }        // 得到接入点的BSSID        public String getBSSID() {                return (mWifiInfo == null) ? "NULL" : mWifiInfo.getBSSID();        }        // 得到WifiInfo的所有信息包        public String getWifiInfo() {                return (mWifiInfo == null) ? "NULL" : mWifiInfo.toString();        }        // 添加一个网络并连接        public int addNetwork(WifiConfiguration wcg) {                int wcgID = mWifiManager.addNetwork(mWifiConfiguration.get(3));                mWifiManager.enableNetwork(wcgID, true);                return wcgID;        }}复制代码AndroidManifest.xml:(注意需要添加的权限)                                                                                                                                                                                                                复制代码布局文件就不贴了,我想看界面你都可以自己写出来,如果有需要,这里可以下载源代码:
VIP VIP
0.262283s