Android 学习之初识wifi

废话不说,上代码:

MainActivity.java


package com.wanmen.acer.wifi_test;

import android.content.DialogInterface;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {

    Button Check =null;
    public String wifiname = null;
    public String wifiMac = null;
    public int wifiID ;
    public int wifiIP ;
    private WifiUtils localwifi;
    public void dialog(String str)
    {
        AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
        builder.setMessage(str);

        builder.setTitle("提示");

        builder.setPositiveButton("ok", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                dialogInterface.dismiss();
            }
        });
        builder.create().show();
    }


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        localwifi = new WifiUtils(MainActivity.this);
        Check = (Button)findViewById(R.id.check);
        Check.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                localwifi.getConnectedInfo();
                wifiname = localwifi.getConnectedSSID();
                wifiID = localwifi.getConnectedID();
                wifiMac = localwifi.getConnectedMacAddr();
                wifiIP = localwifi.getConnectedIPAddr();
                dialog("wifi名称:"+wifiname+'\n'+"wifiID:"+wifiID+'\n'+"wifiIP:"+wifiIP+'\n'+"wifiMac:"+wifiMac);
            }
        });





    }
}

WifiUtils.java//直接用的别人的代码

package com.wanmen.acer.wifi_test;

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.util.Log;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by acer on 2016/9/13.
 */
public class WifiUtils {

        private WifiManager localWifiManager;//提供Wifi管理的各种主要API,主要包含wifi的扫描、建立连接、配置信息等
        //private List<ScanResult> wifiScanList;//ScanResult用来描述已经检测出的接入点,包括接入的地址、名称、身份认证、频率、信号强度等
        private List<WifiConfiguration> wifiConfigList;//WIFIConfiguration描述WIFI的链接信息,包括SSID、SSID隐藏、password等的设置
        private WifiInfo wifiConnectedInfo;//已经建立好网络链接的信息
        private WifiManager.WifiLock wifiLock;//手机锁屏后,阻止WIFI也进入睡眠状态及WIFI的关闭

        public WifiUtils( Context context){
            localWifiManager = (WifiManager)context.getSystemService(Context.WIFI_SERVICE);
        }

        //检查WIFI状态
        public int WifiCheckState(){
            return localWifiManager.getWifiState();
        }

        //开启WIFI
        public void WifiOpen(){
            if(!localWifiManager.isWifiEnabled()){
                localWifiManager.setWifiEnabled(true);
            }
        }

        //关闭WIFI
        public void WifiClose(){
            if(!localWifiManager.isWifiEnabled()){
                localWifiManager.setWifiEnabled(false);
            }
        }

        //扫描wifi
        public void WifiStartScan(){
            localWifiManager.startScan();
        }

        //得到Scan结果
        public List<ScanResult> getScanResults(){
            return localWifiManager.getScanResults();//得到扫描结果
        }

        //Scan结果转为Sting
        public List<String> scanResultToString(List<ScanResult> list){
            List<String> strReturnList = new ArrayList<String>();
            for(int i = 0; i < list.size(); i++){
                ScanResult strScan = list.get(i);
                String str = strScan.toString();
                boolean bool = strReturnList.add(str);
                if(!bool){
                    Log.i("scanResultToSting","Addfail");
                }
            }
            return strReturnList;
        }

        //得到Wifi配置好的信息
        public void getConfiguration(){
            wifiConfigList = localWifiManager.getConfiguredNetworks();//得到配置好的网络信息
            for(int i =0;i<wifiConfigList.size();i++){
                Log.i("getConfiguration",wifiConfigList.get(i).SSID);
                Log.i("getConfiguration",String.valueOf(wifiConfigList.get(i).networkId));
            }
        }
        //判定指定WIFI是否已经配置好,依据WIFI的地址BSSID,返回NetId
        public int IsConfiguration(String SSID){
            Log.i("IsConfiguration",String.valueOf(wifiConfigList.size()));
            for(int i = 0; i < wifiConfigList.size(); i++){
                Log.i(wifiConfigList.get(i).SSID,String.valueOf( wifiConfigList.get(i).networkId));
                if(wifiConfigList.get(i).SSID.equals(SSID)){//地址相同
                    return wifiConfigList.get(i).networkId;
                }
            }
            return -1;
        }

        //添加指定WIFI的配置信息,原列表不存在此SSID
        public int AddWifiConfig(List<ScanResult> wifiList,String ssid,String pwd){
            int wifiId = -1;
            for(int i = 0;i < wifiList.size(); i++){
                ScanResult wifi = wifiList.get(i);
                if(wifi.SSID.equals(ssid)){
                    Log.i("AddWifiConfig","equals");
                    WifiConfiguration wifiCong = new WifiConfiguration();
                    wifiCong.SSID = "\""+wifi.SSID+"\"";//\"转义字符,代表"
                    wifiCong.preSharedKey = "\""+pwd+"\"";//WPA-PSK密码
                    wifiCong.hiddenSSID = false;
                    wifiCong.status = WifiConfiguration.Status.ENABLED;
                    wifiId = localWifiManager.addNetwork(wifiCong);//将配置好的特定WIFI密码信息添加,添加完成后默认是不激活状态,成功返回ID,否则为-1
                    if(wifiId != -1){
                        return wifiId;
                    }
                }
            }
            return wifiId;
        }

        //连接指定Id的WIFI
        public boolean ConnectWifi(int wifiId){
            for(int i = 0; i < wifiConfigList.size(); i++){
                WifiConfiguration wifi = wifiConfigList.get(i);
                if(wifi.networkId == wifiId){
                    while(!(localWifiManager.enableNetwork(wifiId, true))){//激活该Id,建立连接
                        Log.i("ConnectWifi",String.valueOf(wifiConfigList.get(wifiId).status));//status:0--已经连接,1--不可连接,2--可以连接
                    }
                    return true;
                }
            }
            return false;
        }

        //创建一个WIFILock
        public void createWifiLock(String lockName){
            wifiLock = localWifiManager.createWifiLock(lockName);
        }

        //锁定wifilock
        public void acquireWifiLock(){
            wifiLock.acquire();
        }

        //解锁WIFI
        public void releaseWifiLock(){
            if(wifiLock.isHeld()){//判定是否锁定
                wifiLock.release();
            }
        }

        //得到建立连接的信息
        public void getConnectedInfo(){
            wifiConnectedInfo = localWifiManager.getConnectionInfo();
        }
        //得到连接的MAC地址
        public String getConnectedMacAddr(){
            return (wifiConnectedInfo == null)? "NULL":wifiConnectedInfo.getMacAddress();
        }

        //得到连接的名称SSID
        public String getConnectedSSID(){
            return (wifiConnectedInfo == null)? "NULL":wifiConnectedInfo.getSSID();
        }

        //得到连接的IP地址
        public int getConnectedIPAddr(){
            return (wifiConnectedInfo == null)? 0:wifiConnectedInfo.getIpAddress();
        }

        //得到连接的ID
        public int getConnectedID(){
            return (wifiConnectedInfo == null)? 0:wifiConnectedInfo.getNetworkId();
        }
    }

权限:
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>

1.在这次小尝试中,顺便试验了一下AlertDialog窗口,下面说明一下AlertDialog窗口:

这个组件属于APPCOMPAT.v7里面的,但是在xml文件中不知道咋写,于是使用了动态的方式,

AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);该代码并没有使用AlertDialog的构造方法,而是使用了.builder()方法,并且绑定了Mainactivity。
2.测试中出现了一次空指针错误,由于getApplicationContext()方法放在了setContentView(R.layout.activity_main);之前。
3.在测试中,发现Android studio可以在第一次调试之后,不用终止调试,如果更改了代码,可以直接再次点击调试运行,这样就可以不用再执行gradle build了。
4.本次直接用了http://download.youkuaiyun.com/detail/liuhui_8989/7154671中的代码。以表谢意

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值