9

Microsoft Bandに接続して通知を送信するWindows phone 8.1アプリを開発しています。バックグラウンド タスクを実行する必要があるため、 Windows ランタイム コンポーネントプロジェクトを追加しました。

バックグラウンド タスク、つまりランタイム コンポーネント プロジェクトから通知を送信しています。しかし、私はエラーが発生しています。エラーは次のとおりです。

エラー: System.TypeInitializationException: 'Microsoft.Band.Store.StoreResources' の型初期化子が例外をスローしました。---> System.Exception: Microsoft.Band.Store.StoreResources..cctor() の Windows.UI.Xaml.Application.get_Current() で致命的なエラー (HRESULT からの例外: 0x8000FFFF (E_UNEXPECTED)) --- 終了内部例外スタック トレース --- Microsoft.Band.Store.StoreResources.get_RfComm_FromId_ReturnedNull() で Microsoft.Band.Store.BluetoothTransport.GetTransport(RfcommDeviceService サービス、ILoggerProvider loggerProvider、UInt16 maxConnectAttempts) で Microsoft.Band.Store.BluetoothTransport.<> System.Threading.Tasks.Task`1.InnerInvoke() の c__DisplayClass1.b__0() System.Threading.Tasks.Task.Execute() の

この質問の回答で述べたように、バックグラウンド アプリが接続しようとしている間、フォアグラウンド アプリはバンドに接続しようとしないでください。

  • フォアグラウンド アプリが接続しようとしておらず、バンドとの接続もありません。

エラーの場所をデバッグして見つけたので、エラーは Bluetooth への接続の問題によるものだと思います。

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");

私のバンドの Bluetooth は Microsoft Health アプリと正常に接続されているので、電話とバンドの Bluetooth に問題はないと思います。

フォアグラウンド アプリのPackage.appmanifestは次のとおりです。

フォアグラウンド アプリ 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>

では、考えられる問題は何ですか?この問題の解決策または回避策を提供できますか?

4

2 に答える 2

1

Package.appxmanifest ファイルで適切な機能と宣言を設定しましたか?

少なくとも、(Bluetooth を使用するために) 機能で「近接」をオフにし、宣言でバックグラウンド タスクのタイプとエントリ ポイントを指定する必要があります。

于 2015-07-12T09:10:03.723 に答える
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。これは、Microsoft. 以前は version を使用していました1.3.10702.1

于 2015-07-23T18:27:04.247 に答える