「Xamarin.Macで無線LANアクセスポイントのRSSI(電波強度)を取得する」の版間の差分
ナビゲーションに移動
検索に移動
imported>Administrator |
imported>Administrator |
||
3行目: | 3行目: | ||
なんとなく思いついた。 | なんとなく思いついた。 | ||
− | + | [[CoreLocation]]などと組み合わせれば簡単に周囲の[[無線LAN]]の状況を[[リアルタイム]]に[[可視化]]できるかもしれない。 | |
かもしれない。 | かもしれない。 | ||
2016年5月13日 (金) 02:27時点における版
概要
Xamarin.Macで無線LANアクセスポイントのRSSI(電波強度)を取得してみたい。 なんとなく思いついた。
CoreLocationなどと組み合わせれば簡単に周囲の無線LANの状況をリアルタイムに可視化できるかもしれない。 かもしれない。
実装
MonoMacのサンプルに無線LANアクセスポイントを列挙するものがあった。
CoreWLANのCWNetworkクラスを眺めていると「RssiValue」という直球なプロパティが用意されている。
深く考えずに表示してみたところRSSIが電力(dBm)で返ってくる。
なお、CWNetworkクラスには「Rssi」という似たようなプロパティもあるが、こちらは「使うな」とのコメントが入っている。 試しに使ってみたがNSNumber型で普通に値が返ってくる。 でも使うな。
using System;
using Foundation;
using AppKit;
using CoreWlan;
namespace CoreWlanRSSI
{
static class MainClass
{
static void Main(string[] args)
{
NSApplication.Init();
using (new NSAutoreleasePool())
{
string[] interfaces = CWInterface.SupportedInterfaces;
if (interfaces.Length < 1)
{
Console.WriteLine("No supported interface is available in this computer");
return;
}
CWInterface selectedIntface = CWInterface.FromName(interfaces[0]);
// print interface information
Console.WriteLine("\nInterface Information:\nName: {0}, Active SSID: {1}, Active BSSID: {2}\n", selectedIntface.Name, selectedIntface.Ssid, selectedIntface.Bssid);
NSError error;
CWNetwork[] data = selectedIntface.ScanForNetworksWithParameters(null, out error);
if (error != null)
{
Console.Error.WriteLine("An error occurred while scanning for available networks");
return;
}
foreach (CWNetwork d in data)
{
Console.WriteLine("SSID: {0}, BSSID: {1}, RSSI: {2}", d.Ssid, d.Bssid, d.RssiValue);
}
}
}
}
}