開発テンプレートを使ったアプリでセンサーを組み込む - 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メソッドを使います。
以上、短いですがご活用ください。