次の方法で共有


開発テンプレートを使ったアプリでセンサーを組み込む - Windows 8ストアアプリテンプレート TouchDePo

実は私も今アプリを開発中。Windows Phone 7の時にも作ったSensor CheckerのWin8版を作ってます。多分近々ストアに上がるかなと。ここでは、センサーの使い方をチラ見せ。

各タイルをタップしたときのハンドラーでセンサーからデータを取得するコードを埋め込むのですが、基本は、

                var myAccelerometer = Accelerometer.GetDefault();
                if (myAccelerometer == null)
                {
                    var dialog = new Windows.UI.Popups.MessageDialog("Accelometer doesn't work.");
                    var dialogResult = await dialog.ShowAsync();
                }
                if (myAccelerometer != null)
                {
                    myAccelerometer.ReadingChanged += myAccelerometer_ReadingChanged;
                }

センサーの名前空間は、Windows.Devices.Sensorsです。各センサークラスのGetDefault()メソッドでセンサーを取り出します。センサーが装備されていない場合もあるので、nullチェックを忘れずに。
そして、取り出したセンサーのReadingChangedイベントにハンドラーを登録します。これで準備OK。

ハンドラーは、

        async void myAccelerometer_ReadingChanged(Accelerometer sender, AccelerometerReadingChangedEventArgs args)
        {
            await this.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, new Windows.UI.Core.DispatchedHandler(() =>
            {
                double ax = args.Reading.AccelerationX;
                double ay = args.Reading.AccelerationY;
                double az = args.Reading.AccelerationY;

                var panelData = Data.BasicPanelData.Current();
                panelData.AccelerometerX = string.Format("{0:0.0000}", ax);
                panelData.AccelerometerY = string.Format("{0:0.0000}", ay);
                panelData.AccelerometerZ = string.Format("{0:0.0000}", az);
            }));
        }

こんな感じ。センサーが測定したデータが送られてくるので、引数のReadingから測定値を取り出します。ハンドラーがコールされるスレッドはUIのスレッドとは異なるので、処理を委譲します。委譲は、ページのDispatcherプロパティのRunAsyncメソッドを使います。

以上、短いですがご活用ください。