1. 程式人生 > >Android 獲取本機的mac和wifi的BSSID(mac)以及其他資訊

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>

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);
        }
        
    }
}


相關推薦

Android 獲取macwifi的BSSID(mac)以及其他資訊

一上班就開始總結上禮拜寫的wifi,先來說說wifi的屬性 在Android的官方文件中定義瞭如下五種狀態: WIFI_STATE_DISABLED   WIFI 不可用  WIFI_STATE_DISABLING  WIFI 正在關閉  WIFI_STATE_ENABL

Android獲取唯一序列號可變UUID方法

UUID+裝置號序列號 唯一識別碼(不可變) private String getMyUUID(){   final TelephonyManager tm = (TelephonyManager) getBaseContext().getSystemService(Con

js獲取ip地址、mac地址、機器名

只在IE中適用<HTML><HEAD><TITLE>WMI Scripting HTML</TITLE> <META http-equiv=Content-Type content="text/html; charset

Java 核心程式設計-------獲取域名主機名

package GetCanonical; import java.awt.BorderLayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.

Android獲取藍芽地址

從Android6.0開始,通過BluetoothAdapter.getDefaultAdapter().getAddress()獲取的地址是一個固定值02:00:00:00:00:00,部分從低版本

Java程式設計實現獲取IP計算機名的功能

import java.net.InetAddress; import java.net.UnknownHostException; public class Test { public sta

Android獲取號碼(雙卡雙待無法獲取兩個號碼)

        搞了一個想獲取Android手機的本機號碼的功能,但是發現雙卡雙待的手機是無法獲取到兩個號碼 的。在Android的官方文件是沒有提供相應的Api的,因為標準的Andoird是沒有雙卡的,好像也只有國內才會搞雙卡雙待的神器吧。以下記錄一下做這個功能所學習到的

Android獲取IP並轉換為ipv4的形式

//獲取本機IP地址 private String getLocalIpAddress() throws UnknownHostException { WifiManager wifiManager = (WifiManager) getSystemService(W

第二十篇 Android獲取圖片、音訊、視訊、文件以及本地資料夾列表

android獲取本機圖片資料夾,即相簿,以及相簿下的所有圖片的方法,貼出工具類,方便後續使用,效果圖就類似百度網盤上傳圖片的 選擇相簿介面和點選某個相簿選擇圖片的介面. FileManager類: public class FileManager { p

Android獲取區域網IP的方法

直接貼程式碼,主要利用正則表示式匹配區域網ippackage com.rongyan.clienttest; import java.net.InetAddress; import java.net.NetworkInterface; import java.net.So

java獲取名稱、IP、MAC地址網卡名稱

sans mon any flex exc consola 獲取本地ip network log java獲取本機名稱、IP、MAC地址和網卡名稱摘自:https://blog.csdn.net/Dai_Haijiao/article/details/80364370 20

Python獲取MAC地址,ip主機名

獲取mac地址: import uuid def get_mac_address(): mac=uuid.UUID(int = uuid.getnode()).hex[-12:] re

c#中如何獲取MAC地址、IP地址、硬盤ID、CPU序列號等系統信息

finall ipaddress reac 地址 computer mod urn aca rop public class Computer { public static string CpuID; //1.cpu序列號 pub

python-獲取mac地址

names iyu ddr repr pri int .get variant pac 1 #!/usr/bin/env python 2 #-*- coding:utf-8 -*- 3 ############################ 4 #File N

linux 獲取MAC/IP地址的方法

linunx 編程 mac 地址功能:查詢本機IP/MAC地址,過濾掉127.0.0.1 loop-back 地址適用:linux, ubuntu 16.04 調試通過#include <stdlib.h>#include <stdio.h>#include <unistd.h&

CC2540獲取MAC地址

ID cc2540 res mac get ati 本機 [1] sta //獲取自身藍牙地址void GetOwnAddr(void){ static uint8 ownAddress[6] = {0}; ownAddress[5] = XREG(0x780E

Java獲取名稱、MAC地址、IP地址

Java獲取本機名稱、本機MAC地址、IP地址 public class Test { public static void main(String[] args) throws Exception { InetAddre

Linux 獲取IP、MAC地址用法大全

getifaddrs()和struct ifaddrs的使用,獲取本機IP     ifaddrs結構體定義如下: struct ifaddrs { struct ifaddrs *ifa_next; /* Next item in

Node.js 獲取Mac地址

  首先我們要先載入一個包用於獲取mac地址 npm install getmac   載入完畢會在node_modules資料夾下發現一個getmac資料夾,我們把對應的路徑載入到程式中 原始碼如下: var npm = require('../node_modules

(轉)用VC獲取MAC地址

環境:w2k  +   vc6.0   說明:這裡只能獲得MAC地址。 #include "stdafx.h"#include   <stdio.h>   #include   <stdlib.h>   #include   <httpext.h>