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