ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Android 获取本机的mac和wifi的BSSID(mac)以及其他信息

2019-07-29 10:41:01  阅读:298  来源: 互联网

标签:wifi String BSSID int WIFI 获取 mac WifiManager 本机


一上班就开始总结上礼拜写的wifi,先来说说wifi的属性


在Android的官方文档中定义了如下五种状态:

WIFI_STATE_DISABLED   WIFI 不可用 

WIFI_STATE_DISABLING  WIFI 正在关闭 

WIFI_STATE_ENABLED     WIFI 可用 

WIFI_STATE_ENABLING    WIFI 正在打开 

WIFI_STATE_UNKNOWN    WIFI 状态不可知

以下是WifiManager类的函数:

        要操作WIFI设备,就需要使用Context.getSystemService(Context.WIFI_SERVICE)来获取WifiManager对象,并通过这个对象来管理我们的WIFI设备。

addNetwork(WifiConfiguration config) 添加一个config描述的WIFI网络,默认情况下,这个WIFI网络是DISABLE状态的。

calculateSignalLevel(int rssi , int numLevels) 计算信号的等级

compareSignalLevel(int rssiA, int rssiB) 对比网络A和网络B的信号强度

createWifiLock(int lockType, String tag) 创建一个WIFI 锁,锁定当前的WIFI连接

disableNetwork(int netId) 让一个网络连接失效

disconnect() 断开当前的WIFI连接

enableNetwork(int netId, Boolean disableOthers) 连接netId所指的WIFI网络,并是其他的网络都被禁用

getConfiguredNetworks() 获取网络连接的状态

getConnectionInfo() 获取当前连接的信息

getDhcpInfo() 获取DHCP 的信息

getScanResulats() 获取扫描测试的结果

getWifiState() 获取当前WIFI设备的状态

isWifiEnabled() 判断WIFI设备是否打开

pingSupplicant() ping操作,和PC的ping操作相同作用

ressociate() 重新连接WIFI网络,即使该网络是已经被连接上的

reconnect() 重新连接一个未连接上的WIFI网络

removeNetwork() 移除某一个网络

saveConfiguration() 保留一个配置信息

setWifiEnabled() 让一个连接有效

startScan() 开始扫描

updateNetwork(WifiConfiguration config) 更新一个网络连接

获取周围的wifi热点列表

       想得到周围的WIFI热点列表,可以使用WifiManager.getScanResults()返回一个ScanResult列表,ScanResult对象中,包含了以下几个属性:

BSSID 接入点的地址

SSID 网络的名字,唯一区别WIFI网络的名字

Capabilities 网络接入的性质

Frequency 当前WIFI设备附近热点的频率(MHz)

Level 所发现的WIFI网络信号强度

查看自己已连接上的wifi信息

        WifiInfo这个对象可以通过WifiManager.getConnectionInfo()来获取。WifiInfo中包含了当前连接中的相关信息。

getBSSID()  获取BSSID属性 也就是路由器的mac

getDetailedStateOf()  获取客户端的连通性

getHiddenSSID()  获取SSID 是否被隐藏

getIpAddress()  获取IP 地址

getLinkSpeed()  获取连接的速度

getMacAddress()  获取Mac 地址

getRssi()  获取802.11n 网络的信号

getSSID()  获取SSID 也就是wifi名称

getSupplicanState()  获取具体客户端状态的信息

 

呈上代码:

AndroidManifest.xml 注意权限

 

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.gsmcelllocation"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="9"
        android:targetSdkVersion="14" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> //注意权限
<uses-permission android:name="android.permission.INTERNET" />
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity 
            android:name="com.example.gsmcelllocation.WifiMac" 
            android:label="@string/app_name">
           <intent-filter>
              <action android:name="android.intent.action.MAIN" />
              <category android:name="android.intent.category.LAUNCHER" />
           </intent-filter>
       </activity>
    </application>

</manifest>
//注意权限
<uses-permission android:name="android.permission.INTERNET" />
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity 
            android:name="com.example.gsmcelllocation.WifiMac" 
            android:label="@string/app_name">
           <intent-filter>
              <action android:name="android.intent.action.MAIN" />
              <category android:name="android.intent.category.LAUNCHER" />
           </intent-filter>
       </activity>
    </application>

</manifest>

 

wifimac.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="match_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/info"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView" />

    <ScrollView
        android:id="@+id/scrollView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical" >

            <TextView
                android:id="@+id/textView1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="周围wifi热点列表" />

            <TextView
                android:id="@+id/wifi"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="。。。" />

        </LinearLayout>
    </ScrollView>

</LinearLayout>


WifiMac.xml

 

 

package com.feiyue.wifi;

import java.util.List;

import android.app.Activity;
import android.content.Context;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.widget.TextView;
 
public class WifiMac extends Activity
{
 
	private WifiManager wifi;
	TextView wifiText;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.wifimac);
       TextView infoText = (TextView) this.findViewById(R.id.info);
       wifiText = (TextView) this.findViewById(R.id.wifi);
       infoText.setText(getInfo());

       
       Thread t = new Thread(new Runnable() 
       {
       public void run() 
       {
            
           while(true)
           {
               runOnUiThread(new Runnable() 
               {
               public void run()
               {
                   obtainWifiInfo();    
               }
               });
               try{
                   Thread.sleep(500);
               }catch(InterruptedException e){
                   e.printStackTrace();
               }
           }        
       }
       });
       t.start();
   }
 
    private String getInfo()
    {
       wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
       WifiInfo info = wifi.getConnectionInfo();
 
       String maxText = info.getMacAddress();
       String ipText = intToIp(info.getIpAddress());
       String status = "";
       if (wifi.getWifiState() == WifiManager.WIFI_STATE_ENABLED)
       {
           status = "WIFI_STATE_ENABLED";
       }
       String ssid = info.getSSID();
       int networkID = info.getNetworkId();
       int speed = info.getLinkSpeed();
       String bssid = info.getBSSID();
       return "mac:" + maxText + "\n\r"
              + "ip:" + ipText + "\n\r"
              + "wifi status :" + status + "\n\r"
              + "ssid :" + ssid + "\n\r"
              + "net work id :" + networkID + "\n\r"
              + "connection speed:" + speed + "\n\r"
              + "BSSID:" + bssid + "\n\r"
              ;
    }
 
    private String intToIp(int ip)
    {
       return (ip & 0xFF) + "." + ((ip >> 8) & 0xFF) + "." + ((ip >> 16) & 0xFF) + "."
              + ((ip >> 24) & 0xFF);
    }
    
    private void obtainWifiInfo() {
     
            // 显示扫描到的所有wifi信息:
        wifi= (WifiManager) getSystemService(WIFI_SERVICE);  
        if (wifi.getWifiState() == WifiManager.WIFI_STATE_ENABLED)
        {
        	StringBuilder scanBuilder= new StringBuilder();    
            List<ScanResult> scanResults=wifi.getScanResults();//搜索到的设备列表  
            
            for (ScanResult scanResult : scanResults) {
            		
                scanBuilder.append("\n设备名:"+scanResult.SSID
                                +"\n信号强度:"+wifi.calculateSignalLevel(scanResult.level,1001)
                                +"\nBSSID:" + scanResult.BSSID);
            }
            wifiText.setText(scanBuilder);
        }
        
    }
}

 

 

 

 

 

 

标签:wifi,String,BSSID,int,WIFI,获取,mac,WifiManager,本机
来源: https://blog.csdn.net/u011212411/article/details/9763135

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有