
みなさん、こんにちは!
前の記事で 、
Lumia SensorCore SDKとそのコンポーネントを確認しました。これにより、最小電力モードでユーザーアクティビティを追跡するアプリケーションを作成できます。
この記事では
、 SensorCore SDKの 実際の使用法を見て、デバイスの場所に応じて通知を送信するアプリケーションを作成します。 新しいSDKを使用するための推奨事項について説明し、ダミーデータとAPIシミュレーターの生成および使用方法を確認します。
SensorCore SDKの使用例として、
デバイスの場所に応じて通知を
送信するアプリケーションを考えてみましょう。
Place Monitor APIツールは、この目的に最適です。
前の記事で説明したように、SensoreCore SDKでアプリケーションを使用するには、デバイスに特定のソフトウェアおよびハードウェアの特性が必要です。 この条件は、そのようなアプリケーションに追加の要件を課します。 たとえば、電話が関連する要件を満たしていないが、アプリケーションがインストールされている
状況を処理するシナリオを
開発する必要があります。

別の状況では、必要な情報の収集がユーザーによって無効になっている場合、設定
に接続するための
迅速なアクセスを提供する必要があり(図1-2)、ユーザー
がそれらの接続を拒否するシナリオ(図3)-たとえば、アプリケーションが正しく停止する:

次に、
SensorCore SDKを使用して開発のベストプラクティスを使用してアプリケーションを作成する例を考え
ます 。
アプリケーションを作成する
SensorCoreを使用して、アプリケーションがインストールされるデバイスとアプリケーションの安定性および互換性を確保するための一般的なガイドラインがいくつかあります。
初期化、エラー処理、およびアプリケーションライフサイクル管理の例を以下に示します。
- Visual Studio 2013(Update 3)を使用して、C#で空のアプリ(Windows Phone)プロジェクトを作成します。
- SensorCore SDKをプロジェクトに接続します: ツール-> NuGetパッケージマネージャー-> NuGetパッケージの管理

すべてのコンポーネントの[ インストール]をクリックします 。
したがって、 Lumiaライブラリへのリンクがプロジェクトに追加されました。 センス 、 ルミア。 センス。 Windows Phone 用の テストとMicrosoft Visual C ++ 2013 ランタイム パッケージ 。
- APIにアクセスするには、SensorCore HIDデバイスとアプリケーションマニフェストでそれにアクセスする機能を宣言する必要があります。
SDKをインストールすると、次の機能がPackage.appxmanifestに自動的に追加されます。
<DeviceCapability Name="location" /> <m2:DeviceCapability Name="humaninterfacedevice"> <m2:Device Id="vidpid:0421 0716"> <m2:Function Type="usage:ffaa 0001" /> <m2:Function Type="usage:ffee 0001" /> <m2:Function Type="usage:ffee 0002" /> <m2:Function Type="usage:ffee 0003" /> <m2:Function Type="usage:ffee 0004" /> </m2:Device> </m2:DeviceCapability>
- SDKが正しく機能するには、Configuration Managerでプラットフォームをx86に切り替える必要があります。Build-> Configuration manager

デバイスでアプリケーションをテストするときは、 アクティブ ソリューション プラットフォームをARMに設定する必要があることに注意してください。
- SensoreCore SDKツールを使用するには、次のライブラリを接続します。
using Windows.UI.Popups; using System.Threading.Tasks; using Lumia.Sense; using Lumia.Sense.Testing;
SensoreCoreの初期化
アプリケーションを開発するときに、実際のSensorCore APIを使用することは常に可能または便利というわけではありません:定義済みのデータを使用して
特定のアプリケーション
ロジックまたはユーザーインターフェイスを
テストできます。または、Windows Phoneエミュレーターでアプリケーションを実行すると、実際のSensorCoreインターフェイスはまったく使用できません。 このような場合、
SensorCoreシミュレーターを使用する必要があります 。
実際のSensorCore APIをシミュレータに置き換えるのは簡単で、クラス識別子「Simulator」に追加するだけです。
private PlaceMonitor _placeMonitor;=> private PlaceMonitorSimulator _placeMonitor;
ただし、実際のクラスとシミュレータクラスを簡単に切り替えるには、クラスの
エイリアスを使用し、プロジェクト内でキーワードMonitorを使用してアクセスすると便利です。
例:
必要な機器サポートの初期化
Lumia SensorCore SDKの動作は、すべてのデバイスが所有するわけではない電話機のハードウェア機能に基づいているため、開発時に最初に考慮すべきことは
、デバイスがSensorCoreに必要な機器をサポートするかどうかを
確認することです。
SensorCore SDKを使用する必要のないアプリケーションのシナリオがある場合は、それに応じてUIコントロールの可視性を調整するとよいでしょう。
if (await Monitor.IsSupportedAsync())
PlaceMonitorSimulatorクラスが使用されている間、このプロパティはサポートされていないことに注意してください。この段階で、
対応するコードをコメント化する必要がありますが、アプリケーションで実際のAPIを使用する場合は、再度アクティブ化する必要があります:
セキュアコールLumia SensorCore SDK
APIを呼び出すとき、必要な設定(
ロケーションデータ/モーションデータ )が有効になっており、例外が発生しないことを確認することが重要です。
これを行うには、SensorCore SDKを呼び出すときに定義する必要があり、そのような状況を処理する
ラッパーを使用し
ます 。
private async Task<bool> CallSensorcoreApiAsync(Func<Task> action) { Exception failure = null; try { await action(); } catch (Exception e) { failure = e; } if (failure != null) { switch (SenseHelper.GetSenseError(failure.HResult)) { case SenseError.LocationDisabled: MessageDialog dialog = new MessageDialog("Location has been disabled. Do you want to open Location settings now?", "Information"); dialog.Commands.Add(new UICommand("Yes", async cmd => await SenseHelper.LaunchLocationSettingsAsync())); dialog.Commands.Add(new UICommand("No")); await dialog.ShowAsync(); new System.Threading.ManualResetEvent(false).WaitOne(500); return false; case SenseError.SenseDisabled: dialog = new MessageDialog("Motion data has been disabled. Do you want to open Motion data settings now?", "Information"); dialog.Commands.Add(new UICommand("Yes", async cmd => await SenseHelper.LaunchSenseSettingsAsync())); dialog.Commands.Add(new UICommand("No")); await dialog.ShowAsync(); new System.Threading.ManualResetEvent(false).WaitOne(500); return false; default: dialog = new MessageDialog("Failure: " + SenseHelper.GetSenseError(failure.HResult), ""); await dialog.ShowAsync(); return false; } } return true; }
これで、SensorCore SDKにアクセスするためのmonitor.CallSensorcoreApiAsyncラッパーの準備ができたので、SDK呼び出しが安全になります。
API SensorCore SDKを使用する前に、
GetDefaultAsyncを呼び出して初期化する必要があります。 上記のシェルを使用して初期化を実行できます。
if (await CallSensorcoreApiAsync(async () => { monitor = await Monitor.GetDefaultAsync(); }))
SensorCore APIへの呼び出しが失敗した場合、アプリケーションはこの時点で停止します。
センサーの有効化と無効化
Windows XAMLアプリケーションで
は、管理モデルは Silverlightアプリケーション
とは異なるため、センサーの接続と切断は異なる方法で処理されます。
VisibilityChangedイベントハンドラーを追加します。ここでは、アプリケーションがバックグラウンドに送信されたとき、または再びフォーカスが合ったときにPlaceMonitorをアクティブ化および非アクティブ化します。
Windows XAML: Window.Current.VisibilityChanged += async (oo, ee) => { if (monitor != null) { if (!ee.Visible) { await CallSensorcoreApiAsync(async () => { await monitor.DeactivateAsync(); }); } else { await CallSensorcoreApiAsync(async () => { await monitor.ActivateAsync(); }); } } };
Silverlight アプリケーションの場合 、以下を実行します。 protected async override void OnNavigatedTo(NavigationEventArgs e) { if (monitor == null) { await Initialize(); } await monitor.ActivateAsync(); } protected override async void OnNavigatingFrom(NavigatingCancelEventArgs e) { await monitor.DeactivateAsync(); }
エラー処理
Lumia SensorCore SDKのすべてのエラーにより例外が発生し、
SenseHelper.GetSenseError()関数を使用して詳細情報を取得できます
。前述のように、SensorCore SDKを使用するアプリケーションは、SDK機能をサポートしていないデバイスにもインストールできます。
このようなアプリケーションで
は、データ取得センサーがどれも使用できない場合のシナリオを説明
する必要
があります 。 SensorCore SDKなしではアプリケーションが機能しない場合、この機能は
Windows Phoneストアの アプリケーションの説明で指定
する必要があります。
テストデータ
デフォルトでは、各ダミーAPIには処理および再生用のデータがあり
、記録されたデータを入力として
受け入れることも
できます。
独自のセンサーデータをモデル化するには、SenseRecorderクラスを使用できます。
PlaceMonitor monitor = await PlaceMonitor.GetDefaultAsync(); SenseRecorder recorder = new SenseRecorder(monitor); await recorder.StartAsync();
SenseRecording.SaveAsync()は、記録されたデータを表示するためにドキュメントの表示を開始し、電話のドキュメントフォルダーに保存することを提案します。 Explorerを使用して電話機をコンピューターに接続することにより、このフォルダーから保存済みファイルを取得できます。
次に、レコードをプロジェクトに関連付け、
SenseRecording.LoadFromFileAsync()関数を使用してロードし、GetDefaultAsync()関数を使用してデータをシミュレータに転送します。
SenseRecording recording = await SenseRecording.LoadFromFileAsync("myData.txt"); PlaceMonitorSimulator simulator = await PlaceMonitorSimulator.GetDefaultAsync(recording);
デフォルトでは、最初のイベントトリガーが起動直後に記録されるように記録が設定されます。 これらのレコードを以前または後で修正済みとして定義する必要がある場合、
GetDefaultAsync()関数に対して、シミュレーターが動作を開始するための独自の時間を設定できます。
PlaceMonitorSimulator simulator = await PlaceMonitorSimulator.GetDefaultAsync(recording, DateTime.Now - TimeSpan.FromDays(2));
シミュレータは記録されたデータを無期限に再現するため、記録は2日間の履歴として、またはその逆に、アプリケーションの開始から2日後にのみ受信されるデータとして使用できます。
SenseRecordingクラスはバックグラウンドで機能しないため、アプリケーションがバックグラウンドに切り替わると、テストデータの記録が停止し、アクティブ化された場合にのみ続行できることに注意してください。
バックグラウンドタスク
このアプリケーションのアイデアを実装する場合、バックグラウンドタスクを使用する必要があります。これは
、頻繁に訪れた場所のジオフェンスに入った後、アプリケーションが実行されていない
ときに、 「ユーザーが帰宅した」というアプリケーションからの通知が発生するためです。
このようなタスクを作成するには、標準のアルゴリズムがあります。
- バックグラウンドタスクの作成。
- アプリケーションマニフェストで宣言します。
- アプリケーションでのバックグラウンドタスクの登録。
その実装に移りましょう:
新しい
Windows ランタイム コンポーネントプロジェクトをソリューションに追加します。

自動的に生成されたClass1.csの名前をGeofenceBackgroundTaskに変更し、IBackgroundTaskインターフェイスを継承します。
適切な名前空間を接続することを忘れないでください:
Windows.ApplicationModel.Backgroundを使用してバックグラウンドタスクに必要なRunメソッドをこのクラスに追加します。
public void Run(IBackgroundTaskInstance taskInstance) {
バックグラウンドタスクプロジェクトへのリンクを追加し
ます 。
右 クリック ->参照->参照の追加
[OK]を選択してクリックします。
Package.appxmanifestでバックグラウンドタスクを宣言します。
宣言->利用可能な宣言:バックグラウンドタスク->追加タブ
Properties:Locationをマークし、
BackgroundTask.GeofenceBackgroundTaskという名前空間を持つクラスの名前を
エントリポイントフィールドに
入力します
。次のメソッドを追加して、バックグラウンドタスクを登録します。
public static async Task RegisterBackgroundTask() { try { var backgroundAccessStatus = await BackgroundExecutionManager.RequestAccessAsync(); var geofenceTaskBuilder = new BackgroundTaskBuilder() { Name = "GeofenceBackgroundTask", TaskEntryPoint = "BackgroundTask.GeofenceBackgroundTask" }; var trigger = new LocationTrigger(LocationTriggerType.Geofence); geofenceTaskBuilder.SetTrigger(trigger); geofenceTaskBuilder.Register(); } catch (Exception e) { Debug.WriteLine(e); } }
タスクを登録します。これのために、アプリケーションで前のメソッドを呼び出します。
await RegisterBackgroundTask();
その結果、頻繁に訪れる場所のジオゾーンに入ると、バックグラウンドでアプリケーションから通知を受け取ります。

おわりに
開発者は、Windows Phone 8.1の既存の機能に加えて、Lumia SensorCore SDKを使用して、ユーザーが
最小限の電話の
エネルギーリソースを
消費しながら生活活動に関する情報を受信および分析できるアプリケーションを作成する
ための高度な機能を
取得します。
開発者は、Windows Phoneストアからダウンロードできる実際のアプリケーションの既存の
例から新しいAPIを使用する経験を適用できます。 また、新しいSDKの
詳細なドキュメントを使用します。
便利なリンク
Lumia SensorCore SDK:Microsoft Virtual Academy(MVA)トレーニングコースWindows開発センター無料または試用版のVisual Studio 2013をダウンロードするLumia SensorCore SDK:パート1.概要