「Xamarin.Macで無線LANアクセスポイントのRSSI(電波強度)を取得する」の版間の差分
ナビゲーションに移動
検索に移動
imported>Administrator |
|||
2行目: | 2行目: | ||
[[Xamarin.Mac]]で[[無線LANアクセスポイント]]の[[RSSI]](電波強度)を取得してみたい。 | [[Xamarin.Mac]]で[[無線LANアクセスポイント]]の[[RSSI]](電波強度)を取得してみたい。 | ||
なんとなく思いついた。 | なんとなく思いついた。 | ||
− | |||
[[CoreLocation]]などと組み合わせれば簡単に周囲の[[無線LAN]]の状況を[[リアルタイム]]に[[可視化]]できるかもしれない。 | [[CoreLocation]]などと組み合わせれば簡単に周囲の[[無線LAN]]の状況を[[リアルタイム]]に[[可視化]]できるかもしれない。 | ||
かもしれない。 | かもしれない。 | ||
9行目: | 8行目: | ||
[[MonoMac]]のサンプルに[[無線LANアクセスポイント]]を列挙するものがあった。 | [[MonoMac]]のサンプルに[[無線LANアクセスポイント]]を列挙するものがあった。 | ||
* https://github.com/xamarin/mac-samples/blob/master/MicroSamples/HelloCoreWlanSample.cs | * https://github.com/xamarin/mac-samples/blob/master/MicroSamples/HelloCoreWlanSample.cs | ||
− | |||
[[CoreWLAN]]のCWNetworkクラスを眺めていると「RssiValue」という直球な[[プロパティ]]が用意されている。 | [[CoreWLAN]]のCWNetworkクラスを眺めていると「RssiValue」という直球な[[プロパティ]]が用意されている。 |
2016年11月16日 (水) 05:12時点における版
概要
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);
}
}
}
}
}