1

当我尝试Sensors.Windows在我的 Windows 10 机器上运行 Microsoft Band SDK (1.3.10417.1) 的示例项目时,出现以下异常:

System.ArgumentException: Value does not fall within the expected range.
   at Windows.ApplicationModel.Store.CurrentApp.get_AppId()
   at Microsoft.Band.StoreApplicationPlatformProvider`2.GetApplicationIdAsync(CancellationToken token)
   at Microsoft.Band.BandClient.StartOrAwakeStreamingSubscriptionTasks()
   at Microsoft.Band.BandClient.SensorSubscribe(SubscriptionType type)
   at Microsoft.Band.Sensors.BandSensorBase`1.<>c__DisplayClass4.<StartReadingsAsync>b__3()
   at System.Threading.Tasks.Task.InnerInvoke()
   at System.Threading.Tasks.Task.Execute()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.Band.Sensors.BandSensorBase`1.<StartReadingsAsync>d__6.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
   at PunchingBand.Models.PunchingModel.<Connect>d__48.MoveNext()

看起来它正在引发异常,因为如果应用程序未在 Windows 应用商店中列出,则 SDKCurrentApp根据此处的备注部分使用 whichCurrentAppSimulator是不可能的。

如果 SDK 需要访问CurrentApp我如何在开发我的应用程序时让它工作?这不像我可以在预编译的程序集中CurrentApp交换。CurrentAppSimulator

4

1 回答 1

1

更新:这已在 Microsoft Band SDK 版本 1.3.10702 中得到修复。如果可能,升级到该版本,否则使用下面的 hack。

在使用 .NET Reflector 进行一些调查后,我想出了一个技巧来让它工作。currentAppId只需在上设置一个私有字段BandClient,SDK 就不会尝试从CurrentApp. 在与客户端建立连接之后,在尝试流式传输任何传感器之前运行以下命令:

using (IBandClient bandClient = await BandClientManager.Instance.ConnectAsync(pairedBands[0]))
{
    Type.GetType("Microsoft.Band.BandClient, Microsoft.Band")
        .GetRuntimeFields()
        .First(field => field.Name == "currentAppId")
        .SetValue(bandClient, Guid.NewGuid());

一定要包括一个 using forSystem.LinqSystem.Reflection。这显然是一个非常棘手的解决方法,因此希望它在 Band SDK 的未来版本中得到解决。

于 2015-06-05T05:16:01.237 回答