Quantcast
Channel: かずきのBlog@hatena
Viewing all articles
Browse latest Browse all 1387

Xamrin.FormsでBLEのアドバタイズパケットを拾おう(要はビーコン)

$
0
0

ということで、Xamarin.FormsでBLEやってみようと思います。 スキャンして、近くのパケット拾って来るのがゴールくらいにしておきましょう。

BLEを使おうとすると、ネイティブのコードを書かないといけないのですが、幸いにもプラグインのリストにBluetooth LEの文字があります。

github.com

こいつですね。

github.com

www.nuget.org

ということで、Acr.BleパッケージをXamarin.Formsのプロジェクトに追加します。

このAcr.BleですがReactive Extensionsに依存しています。なんてこったいいじゃないですか。 対応Rxのバージョンは2.5なので、Xamarin.Formsでも安心して使えます(最新のRxは.NET Standardじゃないと入らない雰囲気)

Androidのプロジェクトで以下のパーミッションを追加します。

  • Bluetooth
  • BluetoothAdmin
  • AccessCoarseLocation

iOSはplistにこれを追加しておけばいいみたいです。

<key>UIBackgroundModes</key><array><string>bluetooth-central</string></array>
<key>NSBluetoothPeripheralUsageDescription</key><string>なんかメッセージ</string>

今回は手抜きで画面には出さずにDebug.WriteLineで表示させるだけにします。Pageに以下のようなコードを追加します。

using System;
using System.Diagnostics;
using System.Reactive.Linq;
using Acr.Ble;
using Xamarin.Forms;

namespace BleDemo
{
    publicpartialclass BleDemoPage : ContentPage
    {
        public BleDemoPage()
        {
            InitializeComponent();

            BleAdapter.Current.Scan().Subscribe(result =>
            {
                Debug.WriteLine($"{result.Device.Name}:{result.Device.Uuid}:{result.Rssi}");
            });
        }
    }
}

これだけ。

これで実行すると以下のような結果が得られます。ちなみにBluetoothをOFFにしてるとScanメソッドがnullを返すみたいなので要注意。

SensorTag:00000000-0000-0000-0000-b4994c6430c4:-59
SensorTag:00000000-0000-0000-0000-b4994c6430c4:-60
SensorTag:00000000-0000-0000-0000-b4994c6430c4:-59
SensorTag:00000000-0000-0000-0000-b4994c6430c4:-58
SensorTag:00000000-0000-0000-0000-b4994c6430c4:-57
SensorTag:00000000-0000-0000-0000-b4994c6430c4:-58
SensorTag:00000000-0000-0000-0000-b4994c6430c4:-60
SensorTag:00000000-0000-0000-0000-b4994c6430c4:-61
SensorTag:00000000-0000-0000-0000-b4994c6430c4:-59

いい感じなのかな。


Viewing all articles
Browse latest Browse all 1387

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>