我正在开发一个 Windows phone 8.1 应用程序,该应用程序与 Microsoft Band 连接以发送一些通知。我需要执行一些 后台任务 ,因此我添加了 Windows运行时组件项目。
我从后台任务发送通知,即从Runtime组件项目发送通知。但是我收到了一个错误。错误如下:
错误: System.TypeInitializationException:'Microsoft.Band.Store.StoreResources'的类型初始值设定项引发了异常。 ---> System.Exception:灾难性故障(来自HRESULT的异常:0x8000FFFF(E_UNEXPECTED)) 在Windows.UI.Xaml.Application.get_Current() 在Microsoft.Band.Store.StoreResources..cctor() ---内部异常堆栈跟踪结束--- 在Microsoft.Band.Store.StoreResources.get_RfComm_FromId_ReturnedNull() 在Microsoft.Band.Store.BluetoothTransport.GetTransport(RfcommDeviceService服务,ILoggerProvider loggerProvider,UInt16 maxConnectAttempts) 在Microsoft.Band.Store.BluetoothTransport。<> c__DisplayClass1.b__0() 在System.Threading.Tasks.Task`1.InnerInvoke() 在System.Threading.Tasks.Task.Execute()
正如本Question中的答案所述,前台应用程序在后台应用程序尝试连接时不应尝试连接到乐队。
我认为错误是连接到蓝牙的问题,因为我已经调试并找出了错误的位置:
public async void Run(IBackgroundTaskInstance taskInstance)
{
var deferral = taskInstance.GetDeferral();
try
{
Debug.WriteLine("Task Triggered " + DateTime.Now);
taskInstance.Canceled += (s, e) => { };
taskInstance.Progress = 0;
// Get the list of Microsoft Bands paired to the phone.
var pairedBands = await BandClientManager.Instance.GetBandsAsync();
if (pairedBands.Length < 1)
{
Debug.WriteLine(
"This sample app requires a Microsoft Band paired to your device. Also make sure that you have the latest firmware installed on your Band, as provided by the latest Microsoft Health app.");
return;
}
// This is the line I am getting the error
using (var bandClient = await BandClientManager.Instance.ConnectAsync(pairedBands[0]))
{
Debug.WriteLine("Tile creation started");
我的乐队的蓝牙与微软健康应用程序连接正常,所以我想我的手机和乐队的蓝牙没有任何问题。
前台应用的 Package.appmanifest 如下:
后台任务的
Package.appmanifest (Windows运行时组件项目):
<?xml version="1.0" encoding="utf-8"?>
<Package xmlns="http://schemas.microsoft.com/appx/2010/manifest">
<Capabilities>
<DeviceCapability Name="bluetooth.rfcomm" xmlns="http://schemas.microsoft.com/appx/2013/manifest">
<Device Id="any">
<!-- Used by the Microsoft Band SDK -->
<Function Type="serviceId:A502CA9A-2BA5-413C-A4E0-13804E47B38F" />
<!-- Used by the Microsoft Band SDK -->
<Function Type="serviceId:C742E1A2-6320-5ABC-9643-D206C677E580" />
</Device>
</DeviceCapability>
那可能是什么问题呢?你能为这个问题提供解决方案或解决方法吗?
答案 0 :(得分:1)
您是否在Package.appxmanifest文件中设置了正确的功能和声明?
至少需要在功能中检查“接近度”(使用蓝牙)并在声明中指定后台任务的类型和入口点。
答案 1 :(得分:0)
现在代码如下:
public async void Run(IBackgroundTaskInstance taskInstance)
{
Debug.WriteLine("Task triggered");
var deferral = taskInstance.GetDeferral();
var bandInfo = (await BandClientManager.Instance.GetBandsAsync()).FirstOrDefault();
IBandClient bandClient = null;
if (bandInfo != null)
{
Debug.WriteLine("Band found");
try
{
bandClient = await BandClientManager.Instance.ConnectAsync(bandInfo);
}
catch (Exception ex)
{
Debug.WriteLine("Exception: " + ex);
}
if (bandClient != null)
{
try
{
Debug.WriteLine("Band connected: " + bandClient.GetFirmwareVersionAsync().Result);
var bandContactState = await bandClient.SensorManager.Contact.GetCurrentStateAsync();
Debug.WriteLine(bandContactState.State == BandContactState.NotWorn
? "Band not worn"
: "Band worn");
}
catch (Exception ex)
{
Debug.WriteLine("Exception 1: "+ ex);
}
}
}
if (bandClient != null)
{
deferral.Complete();
bandClient.Dispose();
bandClient = null;
}
}
前台和后台任务的包清单与问题中的相同。
唯一的区别是Microsoft.Band
包版本:1.3.10417.1
,我从微软提供的工作样本中获取。以前我使用的是版本1.3.10702.1
。