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

一上班就開始總結上禮拜寫的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);
        }
        
    }
}

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章