「Xamarin.Macで無線LANアクセスポイントのRSSI(電波強度)を取得する」の版間の差分

提供: MonoBook
ナビゲーションに移動 検索に移動
imported>Administrator
 
(2人の利用者による、間の3版が非表示)
1行目: 1行目:
 +
== 概要 ==
 
[[Xamarin.Mac]]で[[無線LANアクセスポイント]]の[[RSSI]](電波強度)を取得してみたい。
 
[[Xamarin.Mac]]で[[無線LANアクセスポイント]]の[[RSSI]](電波強度)を取得してみたい。
 
なんとなく思いついた。
 
なんとなく思いついた。
 +
[[CoreLocation]]などと組み合わせれば簡単に周囲の[[無線LAN]]の状況を[[リアルタイム]]に[[可視化]]できるかもしれない。
 +
かもしれない。
  
 
== 実装 ==
 
== 実装 ==
 
[[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」という直球な[[プロパティ]]が用意されている。

2019年12月25日 (水) 08:04時点における最新版

概要[編集 | ソースを編集]

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

関連項目[編集 | ソースを編集]

参考文献[編集 | ソースを編集]