Androidは、本機のmacとwifiのBSSID(mac)その他の情報を取得

8670 ワード


注:2013年に書いたもので、参考までに
Android 9は、ユーザーのプライバシーを向上させるために、バックグラウンドアプリケーションのデバイスセンサへのアクセスを制限したり、Wi-Fiスキャンで取得した情報を制限したり、通話、携帯電話の状態、Wi-Fiスキャンに関連する新しい権限ルールや権限グループを制限したりするなど、いくつかの動作変更を導入しています.
出勤すると先週書いたwifiをまとめ始め、まずwifiの属性についてお話しします
Androidの公式ドキュメントでは、次の5つのステータスが定義されています.
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)計算信号のレベル
ネットワークAとネットワークBの信号強度を比較するcompareSignalLevel(int rssiA,int rssiB)
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リストを返します.
BSSIDアクセスポイントのアドレス
SSIDネットワークの名前、唯一WIFIネットワークの名前を区別します
Capabilitiesネットワークアクセスの性質
Frequency現在のWIFIデバイス付近のホットスポットの周波数(MHz)
Levelが発見したWIFIネットワーク信号強度
自分が接続したwifi情報を表示
WifiInfoというオブジェクトはWifiManagerを通じてgetConnectionInfo()を使用して取得します.WifiInfoには、現在の接続に関する情報が含まれています.
getBSSID()BSSIDプロパティ、すなわちルータのmacを取得
getDetailedStateOf()クライアントの接続性を取得する
getHiddensSSID()取得SSIDが非表示かどうか
getIpAddress()IPアドレスの取得
getLinkSpeed()接続の取得速度
getMacAddress()Macアドレスの取得
getrssi()802.11 nネットワークの信号を取得
getSSID()取得SSIDつまりwifi名
getSupplicanState()特定のクライアント状態の情報を取得
 
送信コード:
AndroidManifest.xml注意権限
 



    

 //    

    
        
           
              
              
           
       
    


//注意权限

    
        
           
              
              
           
       
    


 

wifimac.xml

 

 




    

    

        

            

            

        
    


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 + "
\r" + "ip:" + ipText + "
\r" + "wifi status :" + status + "
\r" + "ssid :" + ssid + "
\r" + "net work id :" + networkID + "
\r" + "connection speed:" + speed + "
\r" + "BSSID:" + bssid + "
\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 scanResults=wifi.getScanResults();// for (ScanResult scanResult : scanResults) { scanBuilder.append("
:"+scanResult.SSID +"
:"+wifi.calculateSignalLevel(scanResult.level,1001) +"
BSSID:" + scanResult.BSSID); } wifiText.setText(scanBuilder); } } }